agentbundle 0.29.1__tar.gz → 0.29.2__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 (200) hide show
  1. {agentbundle-0.29.1 → agentbundle-0.29.2}/PKG-INFO +10 -1
  2. {agentbundle-0.29.1 → agentbundle-0.29.2}/README-pypi.md +9 -0
  3. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/adapter_root_bins.py +6 -7
  4. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/self_host.py +74 -29
  5. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/self_host.py +10 -0
  6. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/version.py +1 -1
  7. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle.egg-info/PKG-INFO +10 -1
  8. {agentbundle-0.29.1 → agentbundle-0.29.2}/pyproject.toml +1 -1
  9. {agentbundle-0.29.1 → agentbundle-0.29.2}/README.md +0 -0
  10. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/__init__.py +0 -0
  11. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/__main__.py +0 -0
  12. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/adapter.schema.json +0 -0
  13. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/adapter.toml +0 -0
  14. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +0 -0
  15. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
  16. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/manifest.json +0 -0
  17. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
  18. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
  19. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
  20. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/packs/_example/evals/eval_queries.json +0 -0
  21. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
  22. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
  23. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
  24. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
  25. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
  26. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/catalogue.schema.json +0 -0
  27. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/guide.schema.json +0 -0
  28. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/install-defaults.toml +0 -0
  29. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/install-marker.py +0 -0
  30. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/pack.schema.json +0 -0
  31. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
  32. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/plugin-manifest.schema.json +0 -0
  33. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/profile.schema.json +0 -0
  34. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/skill-manifest.schema.json +0 -0
  35. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/skill.schema.json +0 -0
  36. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/_data/target-vocab.toml +0 -0
  37. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/__init__.py +0 -0
  38. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/__main__.py +0 -0
  39. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/adapters/__init__.py +0 -0
  40. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/adapters/claude_code.py +0 -0
  41. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/adapters/codex.py +0 -0
  42. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/adapters/copilot.py +0 -0
  43. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/adapters/cursor.py +0 -0
  44. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/adapters/gemini.py +0 -0
  45. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/adapters/kiro.py +0 -0
  46. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/adapters/kiro_cli.py +0 -0
  47. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/adapters/kiro_ide.py +0 -0
  48. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/contract.py +0 -0
  49. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/lint_packs.py +0 -0
  50. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/main.py +0 -0
  51. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/phase_order.py +0 -0
  52. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/__init__.py +0 -0
  53. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/codex_agent_toml.py +0 -0
  54. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/copilot_agent_md.py +0 -0
  55. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
  56. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/direct_directory.py +0 -0
  57. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/gemini_command_toml.py +0 -0
  58. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/hook_id.py +0 -0
  59. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
  60. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
  61. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/merge_json.py +0 -0
  62. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/projections/user_merge_json.py +0 -0
  63. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
  64. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
  65. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/recipes/marketplace.toml +0 -0
  66. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
  67. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
  68. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
  69. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/recipes/self-host.toml +0 -0
  70. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/scope_rails.py +0 -0
  71. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/shared_libs.py +0 -0
  72. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/target_resolver.py +0 -0
  73. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/__init__.py +0 -0
  74. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_adapter_claude_code.py +0 -0
  75. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_adapter_codex.py +0 -0
  76. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_adapter_copilot.py +0 -0
  77. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_adapter_cursor.py +0 -0
  78. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_adapter_gemini.py +0 -0
  79. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_adapter_kiro.py +0 -0
  80. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_adapter_kiro_alias.py +0 -0
  81. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_adapter_kiro_cli.py +0 -0
  82. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_adapter_kiro_ide.py +0 -0
  83. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_adapter_root_bins_projection.py +0 -0
  84. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_architect_design_reviewer_projection.py +0 -0
  85. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -0
  86. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_build_ships_seeds.py +0 -0
  87. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_contract.py +0 -0
  88. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_contract_scope.py +0 -0
  89. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_contract_v07.py +0 -0
  90. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_contract_v08.py +0 -0
  91. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_direct_directory_cleanup.py +0 -0
  92. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_end_to_end_build.py +0 -0
  93. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +0 -0
  94. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +0 -0
  95. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -0
  96. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_lint_packs.py +0 -0
  97. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_load_pack_hook_wiring_safely.py +0 -0
  98. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_pack_schema.py +0 -0
  99. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_pack_schema_allowed_adapters.py +0 -0
  100. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_pack_schema_install.py +0 -0
  101. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_pipeline.py +0 -0
  102. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_plugin_manifest_schema.py +0 -0
  103. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_projectable_subset.py +0 -0
  104. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_projections_merge_json.py +0 -0
  105. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_scope_rails.py +0 -0
  106. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_security.py +0 -0
  107. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_self_host_check.py +0 -0
  108. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_self_host_fixture_guard.py +0 -0
  109. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_self_host_recipe_config.py +0 -0
  110. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_shared_libs_projection.py +0 -0
  111. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_shared_prefix_contract.py +0 -0
  112. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -0
  113. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -0
  114. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_user_libs_projection.py +0 -0
  115. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_validate.py +0 -0
  116. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_workspace_status_projection.py +0 -0
  117. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/tests/test_writers_emit_lf.py +0 -0
  118. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/user_libs.py +0 -0
  119. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/build/validate.py +0 -0
  120. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue.py +0 -0
  121. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/__init__.py +0 -0
  122. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/archive.py +0 -0
  123. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/build.py +0 -0
  124. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/config.py +0 -0
  125. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/defaults.py +0 -0
  126. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
  127. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/identity.py +0 -0
  128. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/initialise.py +0 -0
  129. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
  130. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/lint.py +0 -0
  131. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/package.py +0 -0
  132. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/results.py +0 -0
  133. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
  134. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
  135. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
  136. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/catalogue_tooling/verify.py +0 -0
  137. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/categories.py +0 -0
  138. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/cli.py +0 -0
  139. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/__init__.py +0 -0
  140. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/_common.py +0 -0
  141. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/_drop_warning.py +0 -0
  142. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/adapt.py +0 -0
  143. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/catalogue_build.py +0 -0
  144. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/catalogue_init.py +0 -0
  145. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/catalogue_lint.py +0 -0
  146. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/catalogue_package.py +0 -0
  147. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/catalogue_self_host.py +0 -0
  148. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
  149. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
  150. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/catalogue_verify.py +0 -0
  151. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/config.py +0 -0
  152. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/diff.py +0 -0
  153. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/docs.py +0 -0
  154. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/init_state.py +0 -0
  155. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/install.py +0 -0
  156. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/list_installed.py +0 -0
  157. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/list_packs.py +0 -0
  158. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/list_profiles.py +0 -0
  159. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/list_targets.py +0 -0
  160. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/oplog_cmd.py +0 -0
  161. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/pack_config_cmd.py +0 -0
  162. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/pack_evals.py +0 -0
  163. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/package_catalogue.py +0 -0
  164. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/profile.py +0 -0
  165. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/reconcile.py +0 -0
  166. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/render.py +0 -0
  167. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/scaffold.py +0 -0
  168. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/show.py +0 -0
  169. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/uninstall.py +0 -0
  170. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/upgrade.py +0 -0
  171. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/commands/validate.py +0 -0
  172. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/config.py +0 -0
  173. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/https_catalogue.py +0 -0
  174. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/local_exclude.py +0 -0
  175. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/oplog.py +0 -0
  176. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/pack_inventory.py +0 -0
  177. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/render.py +0 -0
  178. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/safety.py +0 -0
  179. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/scaffold.py +0 -0
  180. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/scope.py +0 -0
  181. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/source_defaults.py +0 -0
  182. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/statelock.py +0 -0
  183. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/user_config.py +0 -0
  184. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle/workspace_mcp.py +0 -0
  185. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle.egg-info/SOURCES.txt +0 -0
  186. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle.egg-info/dependency_links.txt +0 -0
  187. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle.egg-info/entry_points.txt +0 -0
  188. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle.egg-info/requires.txt +0 -0
  189. {agentbundle-0.29.1 → agentbundle-0.29.2}/agentbundle.egg-info/top_level.txt +0 -0
  190. {agentbundle-0.29.1 → agentbundle-0.29.2}/setup.cfg +0 -0
  191. {agentbundle-0.29.1 → agentbundle-0.29.2}/tests/test_adapter_permissions_projection.py +0 -0
  192. {agentbundle-0.29.1 → agentbundle-0.29.2}/tests/test_linear_primitive.py +0 -0
  193. {agentbundle-0.29.1 → agentbundle-0.29.2}/tests/test_loop_engine_events_jsonl.py +0 -0
  194. {agentbundle-0.29.1 → agentbundle-0.29.2}/tests/test_workspace_mcp_elicit.py +0 -0
  195. {agentbundle-0.29.1 → agentbundle-0.29.2}/tests/test_workspace_mcp_event_bridge.py +0 -0
  196. {agentbundle-0.29.1 → agentbundle-0.29.2}/tests/test_workspace_mcp_git.py +0 -0
  197. {agentbundle-0.29.1 → agentbundle-0.29.2}/tests/test_workspace_mcp_lifecycle.py +0 -0
  198. {agentbundle-0.29.1 → agentbundle-0.29.2}/tests/test_workspace_mcp_stdin.py +0 -0
  199. {agentbundle-0.29.1 → agentbundle-0.29.2}/tests/test_workspace_mcp_tools.py +0 -0
  200. {agentbundle-0.29.1 → agentbundle-0.29.2}/tests/test_workspace_status_engine_autonomous.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbundle
3
- Version: 0.29.1
3
+ Version: 0.29.2
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
@@ -289,6 +289,15 @@ agentbundle catalogue self-host --check --root .
289
289
 
290
290
  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.
291
291
 
292
+ 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:
293
+
294
+ ```toml
295
+ [distribution.agentbundle]
296
+ preferred-adapter = "kiro-ide"
297
+ ```
298
+
299
+ When `preferred-adapter` names an adapter not in the upstream `SELF_HOST_ADAPTERS` list, the self-host engine switches to single-adapter mode: only the named adapter is projected; Claude Code-specific artifacts (`.claude/`, `.codex/`, `.claude-plugin/`, `CLAUDE.md`) are neither written nor drift-checked.
300
+
292
301
  **Run Tier-A activation evals** to measure whether each covered skill fires on the prompts it should:
293
302
 
294
303
  ```bash
@@ -267,6 +267,15 @@ agentbundle catalogue self-host --check --root .
267
267
 
268
268
  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.
269
269
 
270
+ 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:
271
+
272
+ ```toml
273
+ [distribution.agentbundle]
274
+ preferred-adapter = "kiro-ide"
275
+ ```
276
+
277
+ When `preferred-adapter` names an adapter not in the upstream `SELF_HOST_ADAPTERS` list, the self-host engine switches to single-adapter mode: only the named adapter is projected; Claude Code-specific artifacts (`.claude/`, `.codex/`, `.claude-plugin/`, `CLAUDE.md`) are neither written nor drift-checked.
278
+
270
279
  **Run Tier-A activation evals** to measure whether each covered skill fires on the prompts it should:
271
280
 
272
281
  ```bash
@@ -34,9 +34,9 @@ shell-config edits.
34
34
 
35
35
  from __future__ import annotations
36
36
 
37
+ import contextlib
37
38
  import os
38
39
  import shutil
39
- import stat
40
40
  from dataclasses import dataclass
41
41
  from pathlib import Path
42
42
 
@@ -309,19 +309,18 @@ def apply_projection(working_tree: Path, packs_dir: Path) -> None:
309
309
  expected_targets = {p.target for p in projections}
310
310
  for proj in projections:
311
311
  proj.target.parent.mkdir(parents=True, exist_ok=True)
312
- shutil.copy2(proj.source, proj.target)
312
+ shutil.copyfile(proj.source, proj.target)
313
313
  if os.name == "posix":
314
- os.chmod(proj.target, EXECUTABLE_MODE)
314
+ with contextlib.suppress(OSError):
315
+ proj.target.chmod(EXECUTABLE_MODE)
315
316
  # Orphan removal: any *.py file under <working_tree>/.agentbundle/bin/
316
317
  # not claimed by an expected target.
317
318
  target_dir = working_tree / TARGET_SUBDIR
318
319
  if target_dir.is_dir():
319
320
  for existing in sorted(target_dir.glob("*.py")):
320
321
  if existing not in expected_targets:
321
- try:
322
+ with contextlib.suppress(FileNotFoundError): # pragma: no cover — race-only
322
323
  existing.unlink()
323
- except FileNotFoundError: # pragma: no cover — race-only
324
- pass
325
324
 
326
325
 
327
326
  def check_drift(working_tree: Path, packs_dir: Path) -> list[str]:
@@ -336,7 +335,7 @@ def check_drift(working_tree: Path, packs_dir: Path) -> list[str]:
336
335
  """
337
336
  drifts: list[str] = []
338
337
  try:
339
- sources = collect_sources(packs_dir)
338
+ collect_sources(packs_dir)
340
339
  except ValueError as exc:
341
340
  drifts.append(f"[adapter-root-bins] {exc}; run: make build-self")
342
341
  return drifts
@@ -23,10 +23,12 @@ consumer.
23
23
 
24
24
  Self-host scope (see docs/specs/self-hosting/spec.md § Phased rollout):
25
25
  the `SELF_HOST_ADAPTERS` allow-list runs `claude-code` and `codex`.
26
- Kiro and Copilot stay distribution-only so self-host does not project
27
- `.kiro/` or `.github/instructions/`. Both `SELF_HOST_ADAPTERS` and
28
- `SELF_HOST_PACKS` are sourced from `recipes/self-host.toml` (see the
29
- `_DEFAULT_*` block below); the values named here are the current defaults.
26
+ Both `SELF_HOST_ADAPTERS` and `SELF_HOST_PACKS` are sourced from
27
+ `recipes/self-host.toml` (see the `_DEFAULT_*` block below); the values
28
+ named here are the current defaults. When `catalogue.toml` declares a
29
+ `preferred-adapter` outside `SELF_HOST_ADAPTERS` (e.g. ``"kiro-ide"``),
30
+ `run_self_host` restricts projection to that adapter only — see
31
+ `_effective_adapters`.
30
32
  """
31
33
 
32
34
  from __future__ import annotations
@@ -76,6 +78,7 @@ TARGET_PATHS = (
76
78
  Path(".claude"),
77
79
  Path(".codex"),
78
80
  Path(".agents"),
81
+ Path(".kiro"),
79
82
  Path("tools") / "hooks",
80
83
  Path(".github") / "instructions",
81
84
  Path("AGENTS.md"),
@@ -84,12 +87,12 @@ TARGET_PATHS = (
84
87
  # Built-in fallbacks for the self-host pack / adapter allow-lists. The
85
88
  # authoritative values live in `recipes/self-host.toml` (read at import below);
86
89
  # these are used only when that recipe is missing a key or can't be read, so
87
- # module import stays total. Kiro and Copilot remain in the contract for
88
- # distribution builds but are excluded from the self-host runner. This repo is
89
- # the catalogue's home, not an adopter, so `make build-self` only projects the
90
- # in-house packs; `_aggregate_marketplace` intentionally ignores the pack
91
- # filter — the catalogue advertises every pack. See the recipe for the full
92
- # rationale behind the pack selection.
90
+ # module import stays total. This repo is the catalogue's home, not an adopter,
91
+ # so `make build-self` only projects the in-house packs;
92
+ # `_aggregate_marketplace` intentionally ignores the pack filter — the
93
+ # catalogue advertises every pack. See the recipe for the full rationale.
94
+ # Adapters outside this list (e.g. `kiro-ide`) are handled via the
95
+ # `preferred_adapter` override path in `_effective_adapters`.
93
96
  _DEFAULT_SELF_HOST_ADAPTERS: tuple[str, ...] = ("claude-code", "codex")
94
97
  _DEFAULT_SELF_HOST_PACKS: tuple[str, ...] = (
95
98
  "core",
@@ -269,29 +272,52 @@ def _clone_target_subtree(working_tree: Path, destination: Path) -> None:
269
272
  target = destination / relative
270
273
  target.parent.mkdir(parents=True, exist_ok=True)
271
274
  if source.is_dir():
272
- shutil.copytree(source, target)
275
+ shutil.copytree(source, target, copy_function=shutil.copy)
273
276
  else:
274
- shutil.copy2(source, target)
277
+ shutil.copy(source, target)
278
+
279
+
280
+ def _effective_adapters(preferred_adapter: str | None) -> tuple[str, ...]:
281
+ """Return the adapter set to project.
282
+
283
+ When `preferred_adapter` names an adapter that is NOT already in
284
+ `SELF_HOST_ADAPTERS` (e.g. ``"kiro-ide"`` on a downstream repo),
285
+ restrict the set to that single adapter so only its output lands in
286
+ the shadow / working tree. Otherwise — including when
287
+ `preferred_adapter` is ``None`` or is already covered by
288
+ `SELF_HOST_ADAPTERS` — use the full allow-list unchanged, preserving
289
+ existing behaviour for repos like this one that project both
290
+ ``claude-code`` and ``codex``.
291
+ """
292
+ if preferred_adapter and preferred_adapter not in SELF_HOST_ADAPTERS:
293
+ return (preferred_adapter,)
294
+ return SELF_HOST_ADAPTERS
275
295
 
276
296
 
277
297
  def _project_all_adapters(
278
298
  output_root: Path,
279
299
  packs_dir: Path,
280
300
  contract: dict,
301
+ preferred_adapter: str | None = None,
281
302
  ) -> None:
282
303
  """Run direct self-host adapter projections against the
283
304
  `SELF_HOST_PACKS`-filtered pack list. Pack uniqueness validation
284
305
  still runs across every discovered pack so naming collisions in
285
306
  user-scope-default packs aren't masked by the filter.
307
+
308
+ When `preferred_adapter` names an adapter outside `SELF_HOST_ADAPTERS`
309
+ (e.g. ``"kiro-ide"``), only that adapter is projected; see
310
+ `_effective_adapters` for the full selection logic.
286
311
  """
287
312
  packs = discover_packs(packs_dir)
288
313
  for pack in packs:
289
314
  validate_pack_uniqueness(pack)
290
315
  pack_paths = _filter_self_host_packs([pack.path for pack in packs])
316
+ effective = _effective_adapters(preferred_adapter)
291
317
  for adapter_name in ADAPTERS:
292
318
  if adapter_name not in contract["adapter"]:
293
319
  continue
294
- if adapter_name not in SELF_HOST_ADAPTERS:
320
+ if adapter_name not in effective:
295
321
  continue
296
322
  adapter_module = registry[adapter_name.replace("-", "_")]
297
323
  adapter_module.project_packs(pack_paths, contract, output_root)
@@ -392,7 +418,6 @@ EXCLUDED_PATTERNS: tuple[str, ...] = (
392
418
  ".github/**",
393
419
  "AGENTS.local.md",
394
420
  "AGENTS.md", # root-level; nested AGENTS.md not excluded
395
- ".kiro/**",
396
421
  "packages/agentbundle/**",
397
422
  "packs/**",
398
423
  "tools/**",
@@ -567,7 +592,11 @@ def _project_seeds(packs_dir: Path, output_root: Path) -> dict[Path, Path]:
567
592
  continue
568
593
  target = output_root / relative
569
594
  target.parent.mkdir(parents=True, exist_ok=True)
570
- shutil.copy2(src, target, follow_symlinks=False)
595
+ # Use shutil.copy (content + mode, no timestamps) so the shadow seed
596
+ # file has the same permission bits as the source regardless of umask.
597
+ # copyfile (content-only) would leave umask-derived mode on new files,
598
+ # causing false mode drift when the diff gate compares shadow vs disk.
599
+ shutil.copy(src, target)
571
600
  return seen
572
601
 
573
602
 
@@ -693,6 +722,7 @@ def _recreate_claude_symlink(output_root: Path, *, force_copy: bool = False) ->
693
722
  def _build_projected_to_source_map(
694
723
  packs_dir: Path,
695
724
  contract: dict,
725
+ preferred_adapter: str | None = None,
696
726
  ) -> dict[Path, Path]:
697
727
  """Build `{projected_relative_path → source_path}` for Phase-1
698
728
  self-host output. Used by `diff_against_working_tree` to name the
@@ -701,12 +731,13 @@ def _build_projected_to_source_map(
701
731
  if "primitive" not in contract or "adapter" not in contract:
702
732
  return mapping
703
733
  allow = set(SELF_HOST_PACKS)
734
+ effective = _effective_adapters(preferred_adapter)
704
735
  for pack_path in sorted(packs_dir.iterdir()):
705
736
  if not pack_path.is_dir() or not (pack_path / "pack.toml").exists():
706
737
  continue
707
738
  if pack_path.name not in allow:
708
739
  continue
709
- for adapter_name in SELF_HOST_ADAPTERS:
740
+ for adapter_name in effective:
710
741
  if adapter_name not in contract["adapter"]:
711
742
  continue
712
743
  for rule in contract["adapter"][adapter_name].get("projection", []):
@@ -1060,6 +1091,7 @@ def run_self_host(
1060
1091
  force: bool,
1061
1092
  contract: dict | None = None,
1062
1093
  no_symlink: bool = False,
1094
+ preferred_adapter: str | None = None,
1063
1095
  ) -> int:
1064
1096
  """Execute `make build-self` (or `make build-self DRY_RUN=1`).
1065
1097
 
@@ -1068,6 +1100,10 @@ def run_self_host(
1068
1100
  projection → marketplace aggregation → CLAUDE.md symlink → marker
1069
1101
  resolution. Under `dry_run`, all writes happen in a shadow temp
1070
1102
  dir and the result is diffed against the working tree.
1103
+
1104
+ When `preferred_adapter` names an adapter not in `SELF_HOST_ADAPTERS`
1105
+ (e.g. ``"kiro-ide"``), only that adapter is projected and compared.
1106
+ Pass ``None`` (default) to use the full `SELF_HOST_ADAPTERS` list.
1071
1107
  """
1072
1108
  if contract is None:
1073
1109
  contract = load_contract(CONTRACT_PATH)
@@ -1107,11 +1143,18 @@ def run_self_host(
1107
1143
  owner = discovery_flat.get("owner", "eugenelim")
1108
1144
  marketplace_name = discovery_flat.get("project-name", "agent-ready-repo")
1109
1145
 
1146
+ # Gate Claude Code-specific artifacts (CLAUDE.md, .claude-plugin/) on
1147
+ # whether the effective adapter set includes claude-code. When
1148
+ # preferred-adapter is kiro-ide or kiro-cli (or any other adapter not in
1149
+ # SELF_HOST_ADAPTERS), those artifacts are neither written nor expected in
1150
+ # the drift check.
1151
+ _project_claude_artifacts = "claude-code" in _effective_adapters(preferred_adapter)
1152
+
1110
1153
  if dry_run:
1111
1154
  with tempfile.TemporaryDirectory(prefix="agentbundle-shadow-") as shadow_str:
1112
1155
  shadow = Path(shadow_str)
1113
1156
  _clone_target_subtree(working_tree, shadow)
1114
- _project_all_adapters(shadow, packs_dir, contract)
1157
+ _project_all_adapters(shadow, packs_dir, contract, preferred_adapter)
1115
1158
  # Compose AGENTS.md BEFORE seed projection: on a fresh tree the
1116
1159
  # composed output (body + footer) must win over the body-only
1117
1160
  # seed at `packs/core/seeds/AGENTS.md`; on an existing tree
@@ -1123,15 +1166,16 @@ def run_self_host(
1123
1166
  except ValueError as exc:
1124
1167
  print(f"self-host: {exc}", file=sys.stderr)
1125
1168
  return 4
1126
- _aggregate_marketplace(packs_dir, shadow, owner=owner, name=marketplace_name)
1127
- _recreate_claude_symlink(shadow, force_copy=no_symlink)
1128
- extra_marker_paths = list(seed_map.keys()) + [
1129
- Path(".claude-plugin") / "marketplace.json",
1130
- ]
1169
+ if _project_claude_artifacts:
1170
+ _aggregate_marketplace(packs_dir, shadow, owner=owner, name=marketplace_name)
1171
+ _recreate_claude_symlink(shadow, force_copy=no_symlink)
1172
+ extra_marker_paths = list(seed_map.keys())
1173
+ if _project_claude_artifacts:
1174
+ extra_marker_paths.append(Path(".claude-plugin") / "marketplace.json")
1131
1175
  if agents_path is not None:
1132
1176
  extra_marker_paths.append(Path("AGENTS.md"))
1133
1177
  resolve_markers(shadow, discovery_flat, extra_paths=extra_marker_paths)
1134
- source_map = _build_projected_to_source_map(packs_dir, contract)
1178
+ source_map = _build_projected_to_source_map(packs_dir, contract, preferred_adapter)
1135
1179
  projected_paths = {
1136
1180
  rendered.relative_to(shadow)
1137
1181
  for rendered in shadow.rglob("*")
@@ -1169,7 +1213,7 @@ def run_self_host(
1169
1213
  # and the catalogue-visible pack copy (`.apm/user-libs/credbroker/`). No-op
1170
1214
  # outside the monorepo (package source absent — see user_libs docstring).
1171
1215
  _user_libs_apply(working_tree, packs_dir)
1172
- _project_all_adapters(working_tree, packs_dir, contract)
1216
+ _project_all_adapters(working_tree, packs_dir, contract, preferred_adapter)
1173
1217
  # Compose AGENTS.md BEFORE seed projection — see dry-run branch for
1174
1218
  # rationale (the body-only seed at packs/core/seeds/AGENTS.md must
1175
1219
  # not race the body+footer composition on fresh trees).
@@ -1179,11 +1223,12 @@ def run_self_host(
1179
1223
  except ValueError as exc:
1180
1224
  print(f"self-host: {exc}", file=sys.stderr)
1181
1225
  return 4
1182
- _aggregate_marketplace(packs_dir, working_tree, owner=owner, name=marketplace_name)
1183
- _recreate_claude_symlink(working_tree, force_copy=no_symlink)
1184
- extra_marker_paths = list(seed_map.keys()) + [
1185
- Path(".claude-plugin") / "marketplace.json",
1186
- ]
1226
+ if _project_claude_artifacts:
1227
+ _aggregate_marketplace(packs_dir, working_tree, owner=owner, name=marketplace_name)
1228
+ _recreate_claude_symlink(working_tree, force_copy=no_symlink)
1229
+ extra_marker_paths = list(seed_map.keys())
1230
+ if _project_claude_artifacts:
1231
+ extra_marker_paths.append(Path(".claude-plugin") / "marketplace.json")
1187
1232
  if agents_path is not None:
1188
1233
  extra_marker_paths.append(Path("AGENTS.md"))
1189
1234
  resolve_markers(working_tree, discovery_flat, extra_paths=extra_marker_paths)
@@ -40,6 +40,14 @@ def _make_result(ok: bool, operation: str, config: object | None) -> SelfHostRes
40
40
  )
41
41
 
42
42
 
43
+ def _preferred_adapter(config: object | None) -> str | None:
44
+ """Extract preferred_adapter from a loaded CatalogueConfig, or None."""
45
+ try:
46
+ return config.distribution.agentbundle.preferred_adapter or None # type: ignore[union-attr]
47
+ except AttributeError:
48
+ return None
49
+
50
+
43
51
  def check_self_host(root: Path) -> SelfHostResult:
44
52
  """Dry-run self-host check (read-only). Returns SelfHostResult with ok=True on clean."""
45
53
  from agentbundle.build.self_host import run_self_host
@@ -52,6 +60,7 @@ def check_self_host(root: Path) -> SelfHostResult:
52
60
  packs_dir=packs_dir,
53
61
  dry_run=True,
54
62
  force=False,
63
+ preferred_adapter=_preferred_adapter(config),
55
64
  )
56
65
  return _make_result(ok=(rc == 0), operation="check", config=config)
57
66
 
@@ -68,5 +77,6 @@ def write_self_host(root: Path, force: bool = False) -> SelfHostResult:
68
77
  packs_dir=packs_dir,
69
78
  dry_run=False,
70
79
  force=force,
80
+ preferred_adapter=_preferred_adapter(config),
71
81
  )
72
82
  return _make_result(ok=(rc == 0), operation="write", config=config)
@@ -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.1"
17
+ CLI_VERSION = "0.29.2"
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.1
3
+ Version: 0.29.2
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
@@ -289,6 +289,15 @@ agentbundle catalogue self-host --check --root .
289
289
 
290
290
  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.
291
291
 
292
+ 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:
293
+
294
+ ```toml
295
+ [distribution.agentbundle]
296
+ preferred-adapter = "kiro-ide"
297
+ ```
298
+
299
+ When `preferred-adapter` names an adapter not in the upstream `SELF_HOST_ADAPTERS` list, the self-host engine switches to single-adapter mode: only the named adapter is projected; Claude Code-specific artifacts (`.claude/`, `.codex/`, `.claude-plugin/`, `CLAUDE.md`) are neither written nor drift-checked.
300
+
292
301
  **Run Tier-A activation evals** to measure whether each covered skill fires on the prompts it should:
293
302
 
294
303
  ```bash
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "agentbundle"
7
- version = "0.29.1"
7
+ version = "0.29.2"
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