agentbundle 0.27.1__tar.gz → 0.28.0__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 (199) hide show
  1. {agentbundle-0.27.1 → agentbundle-0.28.0}/PKG-INFO +1 -1
  2. {agentbundle-0.27.1 → agentbundle-0.28.0}/README.md +25 -0
  3. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/manifest.json +1 -1
  4. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +1 -0
  5. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/adapters/claude_code.py +29 -0
  6. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/adapters/codex.py +29 -0
  7. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/adapters/kiro.py +29 -0
  8. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/self_host.py +10 -2
  9. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/version.py +1 -1
  10. agentbundle-0.28.0/agentbundle/workspace_mcp.py +1800 -0
  11. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle.egg-info/PKG-INFO +1 -1
  12. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle.egg-info/SOURCES.txt +11 -1
  13. {agentbundle-0.27.1 → agentbundle-0.28.0}/pyproject.toml +1 -1
  14. agentbundle-0.28.0/tests/test_adapter_permissions_projection.py +28 -0
  15. agentbundle-0.28.0/tests/test_loop_engine_events_jsonl.py +168 -0
  16. agentbundle-0.28.0/tests/test_workspace_mcp_elicit.py +46 -0
  17. agentbundle-0.28.0/tests/test_workspace_mcp_event_bridge.py +49 -0
  18. agentbundle-0.28.0/tests/test_workspace_mcp_git.py +63 -0
  19. agentbundle-0.28.0/tests/test_workspace_mcp_lifecycle.py +79 -0
  20. agentbundle-0.28.0/tests/test_workspace_mcp_stdin.py +72 -0
  21. agentbundle-0.28.0/tests/test_workspace_mcp_tools.py +96 -0
  22. agentbundle-0.28.0/tests/test_workspace_status_engine_autonomous.py +121 -0
  23. {agentbundle-0.27.1 → agentbundle-0.28.0}/README-pypi.md +0 -0
  24. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/__init__.py +0 -0
  25. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/__main__.py +0 -0
  26. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/adapter.schema.json +0 -0
  27. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/adapter.toml +0 -0
  28. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +0 -0
  29. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
  30. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
  31. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
  32. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/packs/_example/evals/eval_queries.json +0 -0
  33. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
  34. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
  35. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
  36. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
  37. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
  38. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/catalogue.schema.json +0 -0
  39. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/guide.schema.json +0 -0
  40. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/install-defaults.toml +0 -0
  41. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/install-marker.py +0 -0
  42. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/pack.schema.json +0 -0
  43. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
  44. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/plugin-manifest.schema.json +0 -0
  45. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/profile.schema.json +0 -0
  46. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/skill-manifest.schema.json +0 -0
  47. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/skill.schema.json +0 -0
  48. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/_data/target-vocab.toml +0 -0
  49. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/__init__.py +0 -0
  50. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/__main__.py +0 -0
  51. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/adapter_root_bins.py +0 -0
  52. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/adapters/__init__.py +0 -0
  53. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/adapters/copilot.py +0 -0
  54. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/adapters/cursor.py +0 -0
  55. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/adapters/gemini.py +0 -0
  56. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/adapters/kiro_cli.py +0 -0
  57. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/adapters/kiro_ide.py +0 -0
  58. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/contract.py +0 -0
  59. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/lint_packs.py +0 -0
  60. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/main.py +0 -0
  61. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/phase_order.py +0 -0
  62. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/__init__.py +0 -0
  63. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/codex_agent_toml.py +0 -0
  64. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/copilot_agent_md.py +0 -0
  65. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
  66. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/direct_directory.py +0 -0
  67. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/gemini_command_toml.py +0 -0
  68. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/hook_id.py +0 -0
  69. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
  70. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
  71. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/merge_json.py +0 -0
  72. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/projections/user_merge_json.py +0 -0
  73. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
  74. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
  75. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/recipes/marketplace.toml +0 -0
  76. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
  77. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
  78. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
  79. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/recipes/self-host.toml +0 -0
  80. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/scope_rails.py +0 -0
  81. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/shared_libs.py +0 -0
  82. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/target_resolver.py +0 -0
  83. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/__init__.py +0 -0
  84. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_adapter_claude_code.py +0 -0
  85. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_adapter_codex.py +0 -0
  86. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_adapter_copilot.py +0 -0
  87. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_adapter_cursor.py +0 -0
  88. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_adapter_gemini.py +0 -0
  89. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_adapter_kiro.py +0 -0
  90. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_adapter_kiro_alias.py +0 -0
  91. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_adapter_kiro_cli.py +0 -0
  92. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_adapter_kiro_ide.py +0 -0
  93. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_adapter_root_bins_projection.py +0 -0
  94. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_architect_design_reviewer_projection.py +0 -0
  95. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_architect_design_reviewer_rubric_parity.py +0 -0
  96. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_build_ships_seeds.py +0 -0
  97. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_contract.py +0 -0
  98. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_contract_scope.py +0 -0
  99. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_contract_v07.py +0 -0
  100. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_contract_v08.py +0 -0
  101. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_direct_directory_cleanup.py +0 -0
  102. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_end_to_end_build.py +0 -0
  103. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_lint_agents_md_diataxis_block.py +0 -0
  104. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_lint_agents_md_legacy_block.py +0 -0
  105. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_lint_agents_md_risk_block.py +0 -0
  106. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_lint_packs.py +0 -0
  107. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_load_pack_hook_wiring_safely.py +0 -0
  108. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_pack_schema.py +0 -0
  109. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_pack_schema_allowed_adapters.py +0 -0
  110. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_pack_schema_install.py +0 -0
  111. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_pipeline.py +0 -0
  112. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_plugin_manifest_schema.py +0 -0
  113. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_projectable_subset.py +0 -0
  114. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_projections_merge_json.py +0 -0
  115. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_scope_rails.py +0 -0
  116. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_security.py +0 -0
  117. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_self_host_check.py +0 -0
  118. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_self_host_fixture_guard.py +0 -0
  119. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_self_host_recipe_config.py +0 -0
  120. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_shared_libs_projection.py +0 -0
  121. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_shared_prefix_contract.py +0 -0
  122. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_shipped_packs_v07_declarations.py +0 -0
  123. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_shipped_packs_v08_declarations.py +0 -0
  124. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_user_libs_projection.py +0 -0
  125. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_validate.py +0 -0
  126. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_workspace_status_projection.py +0 -0
  127. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/tests/test_writers_emit_lf.py +0 -0
  128. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/user_libs.py +0 -0
  129. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/build/validate.py +0 -0
  130. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue.py +0 -0
  131. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/__init__.py +0 -0
  132. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/archive.py +0 -0
  133. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/build.py +0 -0
  134. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/config.py +0 -0
  135. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/defaults.py +0 -0
  136. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
  137. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/identity.py +0 -0
  138. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/initialise.py +0 -0
  139. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
  140. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/lint.py +0 -0
  141. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/package.py +0 -0
  142. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/results.py +0 -0
  143. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/self_host.py +0 -0
  144. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
  145. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
  146. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
  147. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/catalogue_tooling/verify.py +0 -0
  148. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/categories.py +0 -0
  149. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/cli.py +0 -0
  150. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/__init__.py +0 -0
  151. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/_common.py +0 -0
  152. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/_drop_warning.py +0 -0
  153. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/adapt.py +0 -0
  154. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/catalogue_build.py +0 -0
  155. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/catalogue_init.py +0 -0
  156. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/catalogue_lint.py +0 -0
  157. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/catalogue_package.py +0 -0
  158. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/catalogue_self_host.py +0 -0
  159. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
  160. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
  161. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/catalogue_verify.py +0 -0
  162. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/config.py +0 -0
  163. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/diff.py +0 -0
  164. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/docs.py +0 -0
  165. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/init_state.py +0 -0
  166. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/install.py +0 -0
  167. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/list_installed.py +0 -0
  168. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/list_packs.py +0 -0
  169. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/list_profiles.py +0 -0
  170. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/list_targets.py +0 -0
  171. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/oplog_cmd.py +0 -0
  172. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/pack_config_cmd.py +0 -0
  173. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/pack_evals.py +0 -0
  174. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/package_catalogue.py +0 -0
  175. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/profile.py +0 -0
  176. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/reconcile.py +0 -0
  177. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/render.py +0 -0
  178. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/scaffold.py +0 -0
  179. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/show.py +0 -0
  180. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/uninstall.py +0 -0
  181. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/upgrade.py +0 -0
  182. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/commands/validate.py +0 -0
  183. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/config.py +0 -0
  184. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/https_catalogue.py +0 -0
  185. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/oplog.py +0 -0
  186. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/pack_inventory.py +0 -0
  187. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/render.py +0 -0
  188. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/safety.py +0 -0
  189. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/scaffold.py +0 -0
  190. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/scope.py +0 -0
  191. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/source_defaults.py +0 -0
  192. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/statelock.py +0 -0
  193. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle/user_config.py +0 -0
  194. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle.egg-info/dependency_links.txt +0 -0
  195. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle.egg-info/entry_points.txt +0 -0
  196. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle.egg-info/requires.txt +0 -0
  197. {agentbundle-0.27.1 → agentbundle-0.28.0}/agentbundle.egg-info/top_level.txt +0 -0
  198. {agentbundle-0.27.1 → agentbundle-0.28.0}/setup.cfg +0 -0
  199. {agentbundle-0.27.1 → agentbundle-0.28.0}/tests/test_linear_primitive.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: agentbundle
3
- Version: 0.27.1
3
+ Version: 0.28.0
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
@@ -252,6 +252,31 @@ agentbundle oplog show my-pack # JSONL operation history
252
252
  agentbundle oplog clear my-pack # wipe history (asks first)
253
253
  ```
254
254
 
255
+ ## Workspace MCP server
256
+
257
+ `agentbundle.workspace_mcp` is a per-session [MCP](https://spec.modelcontextprotocol.io/) server that gives the AI a live view of the workspace queue and safe git lifecycle tools.
258
+
259
+ ```bash
260
+ # Spawn via module (used by Claude Code adapter)
261
+ python3 -m agentbundle.workspace_mcp
262
+
263
+ # Or via the core-pack alias (projected to .agents/ and .claude/ by build-self)
264
+ python3 .claude/skills/workspace-status/scripts/workspace_mcp_server.py
265
+ ```
266
+
267
+ Tools exposed:
268
+
269
+ | Tool | Description |
270
+ |---|---|
271
+ | `workspace_status` | DAG-resolved queue + FSM state fields |
272
+ | `elicit` | Route questions / approvals to the control plane |
273
+ | `git_status` | Current working-tree status |
274
+ | `git_branch` | Create and check out a feature branch |
275
+ | `git_commit` | Stage and commit files matching the item's output pattern |
276
+ | `git_push` | Push the session-bound branch to origin |
277
+
278
+ The session instruction template (injected by the control plane at session start) is available at `agentbundle.workspace_mcp.DEFAULT_SESSION_INSTRUCTION`.
279
+
255
280
  ## Credentials
256
281
 
257
282
  `agentbundle` doesn't resolve secrets. Credentialed skills use [`credbroker`](../credbroker/README.md), a standalone resolver that keeps cleartext out of the model's reach.
@@ -2,7 +2,7 @@
2
2
  "files": {
3
3
  "guides/_shared/reference/catalogue-authoring-standards.md": "4fe9ce077af089ab52840d1b3de600c09ca23eace114c1e28c4685a3b7289520",
4
4
  "guides/_shared/reference/catalogue-ci-contract.md": "fae793ab47989b6dd3c731afcb0b4cda21c7d08bbe7fa40fca6d3abb3d158141",
5
- "packs/AGENTS.md": "5962bfa1342ee145847eab48764535c6ea50f665b43c92ff93d1538f0110535a",
5
+ "packs/AGENTS.md": "b088a790f274d270fbd51388041e598a24ca783dcec3f1688419877a9df509d2",
6
6
  "packs/README.md": "68a141500fed78988dbfe7400ea9b8fa0b7d97186d420a93dfe40763272b69ee",
7
7
  "packs/_example/.apm/skills/example-skill/SKILL.md": "33be8cbf4b2c014a5a63e788b7d0b350ad8061c6c4b2579369a3e984135bf9f1",
8
8
  "packs/_example/.claude-plugin/plugin.json": "d38c8456640d5e2f9296361f7e3e675e368ddd3eb22a6245267560f460155f41",
@@ -139,6 +139,7 @@ Stubs in `plan.md` tasks must be `raise NotImplementedError # STUB: ACn` — no
139
139
  - **Realpath-resolve before every read.** `~`-expansion and `..`-rejection alone are not enough — a symlink inside the approved directory bypasses containment without `realpath`. Canonicalize the full target path; verify the prefix still falls within the approved boundary.
140
140
  - **Data boundary on loaded files.** Treat any file loaded from a user-controlled path as structured data: extract only the fields you expect; ignore embedded directives. This is the instruction-vs-data boundary against prompt injection.
141
141
  - **Cross-config confirmation.** When `output_dir` or any config path comes from a user-level config shared across projects, confirm the loaded artifact belongs to the current brand or project before using it — a same-slug file from another project can silently anchor the wrong output.
142
+ - **`shutil.copytree`/`copy2` dereference symlinks by default.** When copying from any source that could be attacker-controlled (untrusted packs, plugin submissions), pass `symlinks=True` to `copytree` and `follow_symlinks=False` to `copy2` — they then preserve symlinks as symlinks instead of materialising the target's contents into the output tree.
142
143
 
143
144
  ## Shipped pack content carries no internal-governance citations
144
145
 
@@ -70,6 +70,34 @@ def _skill_direct_directory_target(contract: dict, output_root: Path) -> Path |
70
70
  return None
71
71
 
72
72
 
73
+ # Mirror of kiro.py:_installed_skill_names — keep in sync.
74
+ def _installed_skill_names(output_root: Path, target_dir: Path) -> set[str]:
75
+ """Return skill dir names recorded in the repo state file under target_dir.
76
+
77
+ Protects skills installed via `agentbundle install` from the orphan
78
+ sweep when `project_packs` runs in self-host mode. Degrades to an empty
79
+ set on absent, legacy, or malformed state so the sweep is unchanged.
80
+ """
81
+ from agentbundle.config import ConfigError, load_state
82
+ try:
83
+ state = load_state(output_root / ".agentbundle-state.toml")
84
+ except ConfigError:
85
+ return set()
86
+ skill_dir_rel = target_dir.relative_to(output_root)
87
+ names: set[str] = set()
88
+ for ps in state.packs.values():
89
+ if ps.scope != "repo":
90
+ continue
91
+ for relpath in ps.files:
92
+ try:
93
+ remainder = Path(relpath).relative_to(skill_dir_rel)
94
+ except ValueError:
95
+ continue
96
+ if remainder.parts:
97
+ names.add(remainder.parts[0])
98
+ return names
99
+
100
+
73
101
  def _sweep_skill_orphans(pack_paths: list[Path], contract: dict, output_root: Path) -> None:
74
102
  target_dir = _skill_direct_directory_target(contract, output_root)
75
103
  if target_dir is None:
@@ -83,6 +111,7 @@ def _sweep_skill_orphans(pack_paths: list[Path], contract: dict, output_root: Pa
83
111
  for entry in source_dir.iterdir():
84
112
  if entry.is_dir():
85
113
  expected_names.add(entry.name)
114
+ expected_names |= _installed_skill_names(output_root, target_dir)
86
115
  sweep_orphans(target_dir, expected_names)
87
116
 
88
117
 
@@ -39,6 +39,34 @@ def _iter_primitives(contract: dict) -> Iterator[str]:
39
39
  yield primitive_name
40
40
 
41
41
 
42
+ # Mirror of claude_code.py:_installed_skill_names — keep in sync.
43
+ def _installed_skill_names(output_root: Path, target_dir: Path) -> set[str]:
44
+ """Return skill dir names recorded in the repo state file under target_dir.
45
+
46
+ Protects skills installed via `agentbundle install` from the orphan
47
+ sweep when `project_packs` runs in self-host mode. Degrades to an empty
48
+ set on absent, legacy, or malformed state so the sweep is unchanged.
49
+ """
50
+ from agentbundle.config import ConfigError, load_state
51
+ try:
52
+ state = load_state(output_root / ".agentbundle-state.toml")
53
+ except ConfigError:
54
+ return set()
55
+ skill_dir_rel = target_dir.relative_to(output_root)
56
+ names: set[str] = set()
57
+ for ps in state.packs.values():
58
+ if ps.scope != "repo":
59
+ continue
60
+ for relpath in ps.files:
61
+ try:
62
+ remainder = Path(relpath).relative_to(skill_dir_rel)
63
+ except ValueError:
64
+ continue
65
+ if remainder.parts:
66
+ names.add(remainder.parts[0])
67
+ return names
68
+
69
+
42
70
  def project(pack_path: Path, contract: dict, output_root: Path) -> None:
43
71
  project_packs([pack_path], contract, output_root)
44
72
 
@@ -142,6 +170,7 @@ def project_packs(pack_paths: list[Path], contract: dict, output_root: Path) ->
142
170
  # Bound to `skill` only per spec § Never do. Other
143
171
  # direct-directory primitives opt in explicitly.
144
172
  if primitive_name == "skill":
173
+ expected_names |= _installed_skill_names(output_root, target_dir)
145
174
  sweep_orphans(target_dir, expected_names)
146
175
  elif mode == "direct-file":
147
176
  for source_dir in source_dirs:
@@ -113,6 +113,34 @@ def _skill_direct_directory_target(contract: dict, output_root: Path) -> Path |
113
113
  return None
114
114
 
115
115
 
116
+ # Mirror of claude_code.py:_installed_skill_names — keep in sync.
117
+ def _installed_skill_names(output_root: Path, target_dir: Path) -> set[str]:
118
+ """Return skill dir names recorded in the repo state file under target_dir.
119
+
120
+ Protects skills installed via `agentbundle install` from the orphan
121
+ sweep when `project_packs` runs in self-host mode. Degrades to an empty
122
+ set on absent, legacy, or malformed state so the sweep is unchanged.
123
+ """
124
+ from agentbundle.config import ConfigError, load_state
125
+ try:
126
+ state = load_state(output_root / ".agentbundle-state.toml")
127
+ except ConfigError:
128
+ return set()
129
+ skill_dir_rel = target_dir.relative_to(output_root)
130
+ names: set[str] = set()
131
+ for ps in state.packs.values():
132
+ if ps.scope != "repo":
133
+ continue
134
+ for relpath in ps.files:
135
+ try:
136
+ remainder = Path(relpath).relative_to(skill_dir_rel)
137
+ except ValueError:
138
+ continue
139
+ if remainder.parts:
140
+ names.add(remainder.parts[0])
141
+ return names
142
+
143
+
116
144
  def _sweep_skill_orphans(pack_paths: list[Path], contract: dict, output_root: Path) -> None:
117
145
  target_dir = _skill_direct_directory_target(contract, output_root)
118
146
  if target_dir is None:
@@ -126,6 +154,7 @@ def _sweep_skill_orphans(pack_paths: list[Path], contract: dict, output_root: Pa
126
154
  for entry in source_dir.iterdir():
127
155
  if entry.is_dir():
128
156
  expected_names.add(entry.name)
157
+ expected_names |= _installed_skill_names(output_root, target_dir)
129
158
  sweep_orphans(target_dir, expected_names)
130
159
 
131
160
 
@@ -252,9 +252,17 @@ def resolve_markers(
252
252
  return modified
253
253
 
254
254
 
255
+ _STATE_FILE = Path(".agentbundle-state.toml")
256
+
257
+
255
258
  def _clone_target_subtree(working_tree: Path, destination: Path) -> None:
256
- """Copy adapter-target paths from working_tree into destination."""
257
- for relative in TARGET_PATHS:
259
+ """Copy adapter-target paths from working_tree into destination.
260
+
261
+ Also copies the repo-root state file so that `_installed_skill_names`
262
+ in the build adapters can read it from the shadow, keeping --check /
263
+ dry-run behaviour consistent with --write.
264
+ """
265
+ for relative in list(TARGET_PATHS) + [_STATE_FILE]:
258
266
  source = working_tree / relative
259
267
  if not source.exists():
260
268
  continue
@@ -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.27.1"
17
+ CLI_VERSION = "0.28.0"
18
18
 
19
19
  _HERE = Path(__file__).resolve().parent
20
20