agentbundle 0.31.0__tar.gz → 0.32.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.
- agentbundle-0.32.0/MANIFEST.in +16 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/PKG-INFO +44 -11
- {agentbundle-0.31.0 → agentbundle-0.32.0}/README-pypi.md +42 -7
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/adapter.schema.json +19 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/adapter.toml +6 -1
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/manifest.json +4 -1
- agentbundle-0.32.0/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/SKILL.md +27 -0
- agentbundle-0.32.0/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/evals/eval_queries.json +42 -0
- agentbundle-0.32.0/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json +14 -0
- agentbundle-0.32.0/agentbundle/_data/catalogue-scaffold/tests/conformance/test_gemini_admissibility.py +67 -0
- agentbundle-0.32.0/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py +116 -0
- agentbundle-0.32.0/agentbundle/_data/catalogue-scaffold/tests/conformance/test_shared_library_boundaries.py +40 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/plugin-manifest.derived.schema.json +33 -30
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/__init__.py +17 -15
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/adapters/__init__.py +12 -3
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/adapters/claude_code.py +5 -6
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/adapters/codex.py +8 -7
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/adapters/copilot.py +5 -3
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/adapters/kiro.py +18 -18
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/adapters/kiro_ide.py +5 -13
- agentbundle-0.32.0/agentbundle/build/hook_wiring_rules.py +402 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/lint_packs.py +57 -18
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/main.py +199 -37
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/phase_order.py +0 -1
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/codex_agent_toml.py +1 -2
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/copilot_agent_md.py +0 -1
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/copilot_hooks_json.py +0 -1
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/kiro_ide_hook.py +2 -2
- agentbundle-0.32.0/agentbundle/build/projections/plugin_hooks.py +49 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/scope_rails.py +1 -2
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/self_host.py +25 -21
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/target_resolver.py +0 -1
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/validate.py +36 -29
- agentbundle-0.32.0/agentbundle/catalogue_tooling/file_safety.py +63 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/initialise_self_hosted.py +86 -23
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/package.py +51 -20
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/skill_spec_lint.py +7 -4
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/upgrade.py +1 -1
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/validate.py +14 -3
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/render.py +5 -2
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/version.py +1 -1
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle.egg-info/PKG-INFO +44 -11
- agentbundle-0.32.0/agentbundle.egg-info/SOURCES.txt +532 -0
- agentbundle-0.32.0/conftest.py +25 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/pyproject.toml +10 -6
- agentbundle-0.32.0/templates/install-marker.py +1166 -0
- agentbundle-0.32.0/tests/__init__.py +1 -0
- agentbundle-0.32.0/tests/_support.py +192 -0
- agentbundle-0.32.0/tests/build_pipeline/__init__.py +0 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/README.md +40 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/core/.apm/agents/bar.md +6 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/core/.apm/commands/qux.md +3 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/baz.toml +5 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/qux.toml +4 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.py +2 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.sh +3 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/core/.apm/skills/example/SKILL.md +7 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/core/.claude-plugin/plugin.json +5 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/core/pack.toml +13 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/governance-extras/.apm/skills/example/SKILL.md +7 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/governance-extras/.claude-plugin/plugin.json +5 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/governance-extras/pack.toml +16 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/monorepo-extras/.apm/skills/example/SKILL.md +7 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/monorepo-extras/.claude-plugin/plugin.json +5 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/monorepo-extras/pack.toml +11 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/product-documentation/.apm/skills/example/SKILL.md +7 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/product-documentation/.claude-plugin/plugin.json +5 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/product-documentation/pack.toml +11 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.apm/skills/example/SKILL.md +7 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.claude-plugin/plugin.json +5 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/packs/user-guide-diataxis/pack.toml +4 -0
- agentbundle-0.32.0/tests/build_pipeline/fixtures/recipes/bogus-target.toml +9 -0
- agentbundle-0.32.0/tests/build_pipeline/test_adapter_claude_code.py +281 -0
- agentbundle-0.32.0/tests/build_pipeline/test_adapter_codex.py +719 -0
- agentbundle-0.32.0/tests/build_pipeline/test_adapter_copilot.py +120 -0
- agentbundle-0.32.0/tests/build_pipeline/test_adapter_cursor.py +421 -0
- agentbundle-0.32.0/tests/build_pipeline/test_adapter_gemini.py +559 -0
- agentbundle-0.32.0/tests/build_pipeline/test_adapter_kiro.py +464 -0
- agentbundle-0.32.0/tests/build_pipeline/test_adapter_kiro_alias.py +105 -0
- agentbundle-0.32.0/tests/build_pipeline/test_adapter_kiro_cli.py +143 -0
- agentbundle-0.32.0/tests/build_pipeline/test_adapter_kiro_ide.py +214 -0
- agentbundle-0.32.0/tests/build_pipeline/test_adapter_root_bins_projection.py +700 -0
- agentbundle-0.32.0/tests/build_pipeline/test_build_ships_seeds.py +82 -0
- agentbundle-0.32.0/tests/build_pipeline/test_contract.py +606 -0
- agentbundle-0.32.0/tests/build_pipeline/test_contract_scope.py +224 -0
- agentbundle-0.32.0/tests/build_pipeline/test_contract_v07.py +176 -0
- agentbundle-0.32.0/tests/build_pipeline/test_contract_v08.py +249 -0
- agentbundle-0.32.0/tests/build_pipeline/test_direct_directory_cleanup.py +65 -0
- agentbundle-0.32.0/tests/build_pipeline/test_end_to_end_build.py +244 -0
- agentbundle-0.32.0/tests/build_pipeline/test_hook_wiring_rules.py +250 -0
- agentbundle-0.32.0/tests/build_pipeline/test_lint_packs.py +735 -0
- agentbundle-0.32.0/tests/build_pipeline/test_load_pack_hook_wiring_safely.py +175 -0
- agentbundle-0.32.0/tests/build_pipeline/test_pack_schema.py +494 -0
- agentbundle-0.32.0/tests/build_pipeline/test_pack_schema_allowed_adapters.py +255 -0
- agentbundle-0.32.0/tests/build_pipeline/test_pack_schema_install.py +305 -0
- agentbundle-0.32.0/tests/build_pipeline/test_pipeline.py +298 -0
- agentbundle-0.32.0/tests/build_pipeline/test_plugin_hooks.py +82 -0
- agentbundle-0.32.0/tests/build_pipeline/test_plugin_manifest_schema.py +430 -0
- agentbundle-0.32.0/tests/build_pipeline/test_projectable_subset.py +202 -0
- agentbundle-0.32.0/tests/build_pipeline/test_projections_merge_json.py +151 -0
- agentbundle-0.32.0/tests/build_pipeline/test_scope_rails.py +399 -0
- agentbundle-0.32.0/tests/build_pipeline/test_security.py +101 -0
- agentbundle-0.32.0/tests/build_pipeline/test_self_host_check.py +2556 -0
- agentbundle-0.32.0/tests/build_pipeline/test_self_host_fixture_guard.py +149 -0
- agentbundle-0.32.0/tests/build_pipeline/test_self_host_recipe_config.py +113 -0
- agentbundle-0.32.0/tests/build_pipeline/test_shared_libs_projection.py +139 -0
- agentbundle-0.32.0/tests/build_pipeline/test_shared_prefix_contract.py +97 -0
- agentbundle-0.32.0/tests/build_pipeline/test_user_libs_projection.py +492 -0
- agentbundle-0.32.0/tests/build_pipeline/test_validate.py +250 -0
- agentbundle-0.32.0/tests/build_pipeline/test_writers_emit_lf.py +172 -0
- agentbundle-0.32.0/tests/conftest.py +44 -0
- agentbundle-0.32.0/tests/fixtures/adapt/.adapt-discovery.toml +5 -0
- agentbundle-0.32.0/tests/fixtures/adapt/values.toml +3 -0
- agentbundle-0.32.0/tests/fixtures/blank_catalogue/.claude-plugin/marketplace.json +8 -0
- agentbundle-0.32.0/tests/fixtures/blank_catalogue/packs/.gitkeep +0 -0
- agentbundle-0.32.0/tests/fixtures/blank_catalogue/packs/_example/.apm/skills/example-skill/SKILL.md +27 -0
- agentbundle-0.32.0/tests/fixtures/blank_catalogue/packs/_example/.claude-plugin/plugin.json +9 -0
- agentbundle-0.32.0/tests/fixtures/blank_catalogue/packs/_example/README.md +70 -0
- agentbundle-0.32.0/tests/fixtures/blank_catalogue/packs/_example/evals/eval_queries.json +42 -0
- agentbundle-0.32.0/tests/fixtures/blank_catalogue/packs/_example/pack.toml +20 -0
- agentbundle-0.32.0/tests/fixtures/blank_catalogue/profiles/.gitkeep +0 -0
- agentbundle-0.32.0/tests/fixtures/blank_catalogue/profiles/_example/README.md +24 -0
- agentbundle-0.32.0/tests/fixtures/blank_catalogue/profiles/_example/profile.toml +5 -0
- agentbundle-0.32.0/tests/fixtures/brownfield/values.toml +3 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt/AGENTS.md +5 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt/AGENTS.upstream.md +5 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt/DESIGN.md +6 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt/EXPECTED_TREE.md +53 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt/docs/CHARTER.md +5 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt/docs/guides/how-to/index.md +5 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt/docs/howto/getting-started.md +8 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt-expected/AGENTS.md +5 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt-expected/docs/CHARTER.md +5 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt-user-home/.agentbundle/.adapt-discovery.toml +12 -0
- agentbundle-0.32.0/tests/fixtures/brownfield-adapt-user-home/.agentbundle/state.toml +1 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/argv-flag/SKILL.md +23 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/argv-flag/scripts/cli.py +15 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/argv-flag-derived/SKILL.md +22 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/argv-flag-derived/scripts/cli.py +28 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/argv-flag-normalised/SKILL.md +22 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/argv-flag-normalised/scripts/cli.py +23 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/conforming/SKILL.md +23 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/conforming/scripts/cli.py +15 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/dotfile-grep/SKILL.md +22 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/dotfile-grep/scripts/leak.py +12 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/dotfile-with-optout/SKILL.md +25 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/dotfile-with-optout/scripts/legit.py +13 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/mcp-server-headers/SKILL.md +26 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/mcp-server-headers/scripts/cli.py +17 -0
- agentbundle-0.32.0/tests/fixtures/creds/skills/missing-dont-block/SKILL.md +10 -0
- agentbundle-0.32.0/tests/fixtures/install/catalogue/packs/alpha/.apm/agents/helper.md +6 -0
- agentbundle-0.32.0/tests/fixtures/install/catalogue/packs/alpha/.apm/commands/cmd.md +3 -0
- agentbundle-0.32.0/tests/fixtures/install/catalogue/packs/alpha/.apm/hook-wiring/run.toml +2 -0
- agentbundle-0.32.0/tests/fixtures/install/catalogue/packs/alpha/.apm/hooks/run.sh +3 -0
- agentbundle-0.32.0/tests/fixtures/install/catalogue/packs/alpha/.apm/skills/example/SKILL.md +7 -0
- agentbundle-0.32.0/tests/fixtures/install/catalogue/packs/alpha/.claude-plugin/plugin.json +5 -0
- agentbundle-0.32.0/tests/fixtures/install/catalogue/packs/alpha/pack.toml +13 -0
- agentbundle-0.32.0/tests/fixtures/kiro_ide_hook/ask_agent_basic.kiro.hook +13 -0
- agentbundle-0.32.0/tests/fixtures/kiro_ide_hook/run_command_with_placeholder.kiro.hook +13 -0
- agentbundle-0.32.0/tests/fixtures/lint_packs/clean/pack.toml +11 -0
- agentbundle-0.32.0/tests/fixtures/lint_packs/clean/seeds/README.md +3 -0
- agentbundle-0.32.0/tests/fixtures/list-installed/golden_120col.txt +5 -0
- agentbundle-0.32.0/tests/fixtures/list-installed/golden_80col.txt +5 -0
- agentbundle-0.32.0/tests/fixtures/list_packs/catalogue/packs/alpha/pack.toml +5 -0
- agentbundle-0.32.0/tests/fixtures/list_packs/catalogue/packs/beta/pack.toml +10 -0
- agentbundle-0.32.0/tests/fixtures/local_scope/catalogue/packs/local-test-pack/.apm/skills/local-test/SKILL.md +3 -0
- agentbundle-0.32.0/tests/fixtures/local_scope/catalogue/packs/local-test-pack/pack.toml +5 -0
- agentbundle-0.32.0/tests/fixtures/packs/cc-user-hooks/.apm/hook-wiring/on-prompt.toml +8 -0
- agentbundle-0.32.0/tests/fixtures/packs/cc-user-hooks/.apm/hooks/on-prompt.sh +2 -0
- agentbundle-0.32.0/tests/fixtures/packs/cc-user-hooks/pack.toml +18 -0
- agentbundle-0.32.0/tests/fixtures/packs/kiro-repo-hooks/.apm/agents/reviewer.md +8 -0
- agentbundle-0.32.0/tests/fixtures/packs/kiro-repo-hooks/.apm/hook-wiring/on-spawn.toml +5 -0
- agentbundle-0.32.0/tests/fixtures/packs/kiro-repo-hooks/.apm/hooks/on-spawn.sh +2 -0
- agentbundle-0.32.0/tests/fixtures/packs/kiro-repo-hooks/pack.toml +20 -0
- agentbundle-0.32.0/tests/fixtures/packs/kiro-user-hooks/.apm/agents/reviewer.md +8 -0
- agentbundle-0.32.0/tests/fixtures/packs/kiro-user-hooks/.apm/hook-wiring/on-spawn.toml +5 -0
- agentbundle-0.32.0/tests/fixtures/packs/kiro-user-hooks/.apm/hooks/on-spawn.sh +2 -0
- agentbundle-0.32.0/tests/fixtures/packs/kiro-user-hooks/pack.toml +21 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/agents/reviewer.md +5 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hook-wiring/on-spawn.toml +5 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hooks/on-spawn.sh +2 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-missing-attach/pack.toml +14 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/agents/reviewer.md +5 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hook-wiring/on-spawn.toml +7 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hooks/on-spawn.sh +2 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-pascal-events/pack.toml +16 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/agents/reviewer.md +5 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hook-wiring/on-spawn.toml +7 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hooks/on-spawn.sh +2 -0
- agentbundle-0.32.0/tests/fixtures/packs/malformed-kiro-unknown-agent/pack.toml +13 -0
- agentbundle-0.32.0/tests/fixtures/scaffold/test-pack/seeds/AGENTS.md +1 -0
- agentbundle-0.32.0/tests/fixtures/scaffold/test-pack/seeds/_agents-footer.md +1 -0
- agentbundle-0.32.0/tests/fixtures/scaffold/test-pack/seeds/docs/CHARTER.md +1 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/agents/reviewer.md +6 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/commands/deploy.md +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hook-wiring/pre-commit.toml +9 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/lint.py +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/pre-commit.sh +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/skills/work-loop/SKILL.md +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v1/packs/core/.claude-plugin/plugin.json +5 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v1/packs/core/pack.toml +13 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/agents/reviewer.md +6 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/commands/deploy.md +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hook-wiring/pre-commit.toml +9 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/lint.py +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/pre-commit.sh +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/skills/work-loop/SKILL.md +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v2/packs/core/.claude-plugin/plugin.json +5 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v2/packs/core/pack.toml +13 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/agents/reviewer.md +6 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/commands/deploy.md +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hook-wiring/pre-commit.toml +9 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/lint.py +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/pre-commit.sh +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/skills/work-loop/SKILL.md +3 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v3/packs/core/.claude-plugin/plugin.json +5 -0
- agentbundle-0.32.0/tests/fixtures/upgrade/catalogue_v3/packs/core/pack.toml +13 -0
- agentbundle-0.32.0/tests/fixtures/validate/bad_recipe_pack/pack.toml +5 -0
- agentbundle-0.32.0/tests/fixtures/validate/malformed_pack/pack.toml +1 -0
- agentbundle-0.32.0/tests/fixtures/validate/valid_pack/pack.toml +4 -0
- agentbundle-0.32.0/tests/fixtures/validate/version_mismatch_pack/pack.toml +7 -0
- agentbundle-0.32.0/tests/integration/__init__.py +0 -0
- agentbundle-0.32.0/tests/integration/test_adapt_cmd.py +317 -0
- agentbundle-0.32.0/tests/integration/test_adapt_dual_scope.py +247 -0
- agentbundle-0.32.0/tests/integration/test_adapt_preflight_detection.py +217 -0
- agentbundle-0.32.0/tests/integration/test_adapt_schema_migration.py +125 -0
- agentbundle-0.32.0/tests/integration/test_apm_install_route.py +788 -0
- agentbundle-0.32.0/tests/integration/test_blank_catalogue.py +58 -0
- agentbundle-0.32.0/tests/integration/test_brownfield_adapt_end_to_end.py +205 -0
- agentbundle-0.32.0/tests/integration/test_brownfield_round_trip.py +133 -0
- agentbundle-0.32.0/tests/integration/test_brownfield_user_home_fixture.py +44 -0
- agentbundle-0.32.0/tests/integration/test_build_check_drift_gates.py +523 -0
- agentbundle-0.32.0/tests/integration/test_build_derivation_apm.py +181 -0
- agentbundle-0.32.0/tests/integration/test_build_derivation_claude_plugins.py +683 -0
- agentbundle-0.32.0/tests/integration/test_catalogue_init.py +465 -0
- agentbundle-0.32.0/tests/integration/test_cc_user_hooks_fixture.py +107 -0
- agentbundle-0.32.0/tests/integration/test_claude_plugins_install_route.py +1791 -0
- agentbundle-0.32.0/tests/integration/test_config_cascade.py +174 -0
- agentbundle-0.32.0/tests/integration/test_credential_brokers_pack_install.py +205 -0
- agentbundle-0.32.0/tests/integration/test_credentials_wheel.py +75 -0
- agentbundle-0.32.0/tests/integration/test_discovery_schema_cross_consumer.py +116 -0
- agentbundle-0.32.0/tests/integration/test_editable_source_detection.py +113 -0
- agentbundle-0.32.0/tests/integration/test_fixtures_validate.py +226 -0
- agentbundle-0.32.0/tests/integration/test_hook_wiring_ingress.py +220 -0
- agentbundle-0.32.0/tests/integration/test_install_adapt_chain.py +442 -0
- agentbundle-0.32.0/tests/integration/test_install_cmd.py +691 -0
- agentbundle-0.32.0/tests/integration/test_install_converters_user_scope.py +190 -0
- agentbundle-0.32.0/tests/integration/test_install_copilot_full_parity.py +278 -0
- agentbundle-0.32.0/tests/integration/test_install_core_smoke.py +88 -0
- agentbundle-0.32.0/tests/integration/test_install_default_source.py +187 -0
- agentbundle-0.32.0/tests/integration/test_install_dependencies_gate.py +321 -0
- agentbundle-0.32.0/tests/integration/test_install_dropped_primitives_warning.py +550 -0
- agentbundle-0.32.0/tests/integration/test_install_dual_scope.py +440 -0
- agentbundle-0.32.0/tests/integration/test_install_orphan_reshape.py +135 -0
- agentbundle-0.32.0/tests/integration/test_install_pack_metadata_shape.py +278 -0
- agentbundle-0.32.0/tests/integration/test_install_profile.py +408 -0
- agentbundle-0.32.0/tests/integration/test_install_profile_live.py +103 -0
- agentbundle-0.32.0/tests/integration/test_install_repo_scope_per_adapter.py +730 -0
- agentbundle-0.32.0/tests/integration/test_install_research_user_scope.py +200 -0
- agentbundle-0.32.0/tests/integration/test_install_seed_delivery.py +222 -0
- agentbundle-0.32.0/tests/integration/test_install_session_start_wiring.py +141 -0
- agentbundle-0.32.0/tests/integration/test_install_upgrade_offer.py +243 -0
- agentbundle-0.32.0/tests/integration/test_install_user_hooks.py +411 -0
- agentbundle-0.32.0/tests/integration/test_install_user_scope_allowed_adapters.py +225 -0
- agentbundle-0.32.0/tests/integration/test_kiro_ide_hook_e2e.py +204 -0
- agentbundle-0.32.0/tests/integration/test_kiro_repo_hooks_fixture.py +93 -0
- agentbundle-0.32.0/tests/integration/test_kiro_user_hooks_fixture.py +155 -0
- agentbundle-0.32.0/tests/integration/test_list_packs_cmd.py +148 -0
- agentbundle-0.32.0/tests/integration/test_local_scope_install.py +377 -0
- agentbundle-0.32.0/tests/integration/test_marketplace_entry_validation.py +390 -0
- agentbundle-0.32.0/tests/integration/test_marketplace_manifest_regression.py +303 -0
- agentbundle-0.32.0/tests/integration/test_multi_pack_install.py +805 -0
- agentbundle-0.32.0/tests/integration/test_orphan_cleanup_respects_foreign_state.py +273 -0
- agentbundle-0.32.0/tests/integration/test_plugin_route_membership.py +613 -0
- agentbundle-0.32.0/tests/integration/test_recommends_cross_scope.py +228 -0
- agentbundle-0.32.0/tests/integration/test_reconcile.py +230 -0
- agentbundle-0.32.0/tests/integration/test_reserved_path_filter.py +236 -0
- agentbundle-0.32.0/tests/integration/test_scaffold_projection.py +147 -0
- agentbundle-0.32.0/tests/integration/test_self_host_schema_migration.py +138 -0
- agentbundle-0.32.0/tests/integration/test_self_host_sweep_respects_state.py +312 -0
- agentbundle-0.32.0/tests/integration/test_shared_prefix_coexistence.py +235 -0
- agentbundle-0.32.0/tests/integration/test_show_cmd.py +515 -0
- agentbundle-0.32.0/tests/integration/test_tier_invariants.py +335 -0
- agentbundle-0.32.0/tests/integration/test_uninstall_cmd.py +381 -0
- agentbundle-0.32.0/tests/integration/test_uninstall_user_hooks.py +327 -0
- agentbundle-0.32.0/tests/integration/test_upgrade_attach_to_agent.py +140 -0
- agentbundle-0.32.0/tests/integration/test_upgrade_cmd.py +1087 -0
- agentbundle-0.32.0/tests/integration/test_upgrade_user_hooks.py +307 -0
- agentbundle-0.32.0/tests/integration/test_version_gate_matrix.py +163 -0
- agentbundle-0.32.0/tests/integration/test_workspace_mcp_git_fsm.py +156 -0
- agentbundle-0.32.0/tests/integration/test_zipapp.py +92 -0
- agentbundle-0.32.0/tests/unit/__init__.py +0 -0
- agentbundle-0.32.0/tests/unit/test_adapt_discovery_schema.py +292 -0
- agentbundle-0.32.0/tests/unit/test_append_layout_section.py +238 -0
- agentbundle-0.32.0/tests/unit/test_architect_readme_install_command.py +26 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_ci_contract.py +244 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_curation_deps.py +62 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_init_cli_self_hosted.py +206 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_pack_defaults.py +596 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_self_hosted_export_removal.py +27 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_skill_spec_lint.py +913 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_archive.py +296 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_build.py +98 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_defaults.py +267 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_foundation.py +584 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_identity.py +151 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_init.py +783 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_lint.py +1146 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_package.py +958 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_self_host.py +314 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_self_hosted_init.py +1069 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_source_package.py +386 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_tooling_verify.py +461 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_wave2_schema.py +171 -0
- agentbundle-0.32.0/tests/unit/test_catalogue_wave2_validation.py +272 -0
- agentbundle-0.32.0/tests/unit/test_cli_catalogue_optional.py +38 -0
- agentbundle-0.32.0/tests/unit/test_cli_help_lists_config.py +45 -0
- agentbundle-0.32.0/tests/unit/test_cli_path_normalisation.py +161 -0
- agentbundle-0.32.0/tests/unit/test_cli_profile_surface.py +87 -0
- agentbundle-0.32.0/tests/unit/test_cli_scope_flags.py +193 -0
- agentbundle-0.32.0/tests/unit/test_codex_agent_toml.py +350 -0
- agentbundle-0.32.0/tests/unit/test_codex_projection_modes.py +193 -0
- agentbundle-0.32.0/tests/unit/test_common_classify_seeds.py +164 -0
- agentbundle-0.32.0/tests/unit/test_config.py +187 -0
- agentbundle-0.32.0/tests/unit/test_config_cmd.py +136 -0
- agentbundle-0.32.0/tests/unit/test_configured_adapter.py +35 -0
- agentbundle-0.32.0/tests/unit/test_confirm_helper.py +67 -0
- agentbundle-0.32.0/tests/unit/test_contract_parity.py +30 -0
- agentbundle-0.32.0/tests/unit/test_contract_v0_3_schema.py +598 -0
- agentbundle-0.32.0/tests/unit/test_copilot_agent_md.py +182 -0
- agentbundle-0.32.0/tests/unit/test_copilot_hooks_json.py +147 -0
- agentbundle-0.32.0/tests/unit/test_copilot_user_scope_wiring.py +151 -0
- agentbundle-0.32.0/tests/unit/test_credbroker_lint_hardening.py +167 -0
- agentbundle-0.32.0/tests/unit/test_dependencies_batch.py +117 -0
- agentbundle-0.32.0/tests/unit/test_diff_cmd.py +115 -0
- agentbundle-0.32.0/tests/unit/test_footprint_ownership.py +114 -0
- agentbundle-0.32.0/tests/unit/test_https_catalogue.py +1080 -0
- agentbundle-0.32.0/tests/unit/test_init_state_cmd.py +176 -0
- agentbundle-0.32.0/tests/unit/test_install_argparse_adapter_flag.py +82 -0
- agentbundle-0.32.0/tests/unit/test_install_argparse_emit_install_routes.py +263 -0
- agentbundle-0.32.0/tests/unit/test_install_defaults_preferred_adapter.py +343 -0
- agentbundle-0.32.0/tests/unit/test_install_dropped_primitives_warning.py +782 -0
- agentbundle-0.32.0/tests/unit/test_install_event_dropped_wirings.py +467 -0
- agentbundle-0.32.0/tests/unit/test_install_first_value_handoff.py +387 -0
- agentbundle-0.32.0/tests/unit/test_install_force_help.py +33 -0
- agentbundle-0.32.0/tests/unit/test_install_inband_detection.py +580 -0
- agentbundle-0.32.0/tests/unit/test_install_messages.py +136 -0
- agentbundle-0.32.0/tests/unit/test_install_messages_repo_scope.py +289 -0
- agentbundle-0.32.0/tests/unit/test_install_refusal_ordering.py +211 -0
- agentbundle-0.32.0/tests/unit/test_install_state_provenance.py +215 -0
- agentbundle-0.32.0/tests/unit/test_kiro_ide_hook_projection.py +389 -0
- agentbundle-0.32.0/tests/unit/test_kiro_ide_hook_rail.py +335 -0
- agentbundle-0.32.0/tests/unit/test_kiro_ide_hook_schema.py +125 -0
- agentbundle-0.32.0/tests/unit/test_lint_agent_artifacts_metadata_auth.py +166 -0
- agentbundle-0.32.0/tests/unit/test_list_installed_cmd.py +349 -0
- agentbundle-0.32.0/tests/unit/test_list_installed_status.py +1197 -0
- agentbundle-0.32.0/tests/unit/test_list_targets_cmd.py +120 -0
- agentbundle-0.32.0/tests/unit/test_local_scope_schema.py +83 -0
- agentbundle-0.32.0/tests/unit/test_local_scope_t10_uninstall.py +353 -0
- agentbundle-0.32.0/tests/unit/test_local_scope_t12_show.py +71 -0
- agentbundle-0.32.0/tests/unit/test_local_scope_t2_resolve.py +64 -0
- agentbundle-0.32.0/tests/unit/test_local_scope_t3_config.py +37 -0
- agentbundle-0.32.0/tests/unit/test_local_scope_t4_state_path.py +28 -0
- agentbundle-0.32.0/tests/unit/test_local_scope_t5_list_installed.py +131 -0
- agentbundle-0.32.0/tests/unit/test_local_scope_t7_install_gates.py +229 -0
- agentbundle-0.32.0/tests/unit/test_local_scope_t8_install.py +401 -0
- agentbundle-0.32.0/tests/unit/test_local_scope_t9_exclude.py +253 -0
- agentbundle-0.32.0/tests/unit/test_marker_schema_version_parity.py +51 -0
- agentbundle-0.32.0/tests/unit/test_merge_into_agent_json.py +347 -0
- agentbundle-0.32.0/tests/unit/test_multi_adapter_disambiguator.py +83 -0
- agentbundle-0.32.0/tests/unit/test_nested_symlink_hardening.py +154 -0
- agentbundle-0.32.0/tests/unit/test_org_bootstrap.py +746 -0
- agentbundle-0.32.0/tests/unit/test_pack_config_api.py +469 -0
- agentbundle-0.32.0/tests/unit/test_pack_inventory.py +122 -0
- agentbundle-0.32.0/tests/unit/test_package_catalogue.py +1190 -0
- agentbundle-0.32.0/tests/unit/test_packstate_source_provenance.py +245 -0
- agentbundle-0.32.0/tests/unit/test_pipeline_phase_order.py +264 -0
- agentbundle-0.32.0/tests/unit/test_plugin_scope_filter.py +181 -0
- agentbundle-0.32.0/tests/unit/test_profile_reader.py +172 -0
- agentbundle-0.32.0/tests/unit/test_render.py +49 -0
- agentbundle-0.32.0/tests/unit/test_render_cmd.py +235 -0
- agentbundle-0.32.0/tests/unit/test_render_table.py +162 -0
- agentbundle-0.32.0/tests/unit/test_resolve_state_path.py +19 -0
- agentbundle-0.32.0/tests/unit/test_resolve_target_adapter_user_config.py +279 -0
- agentbundle-0.32.0/tests/unit/test_resolve_user_scope_target_adapter.py +690 -0
- agentbundle-0.32.0/tests/unit/test_safety.py +287 -0
- agentbundle-0.32.0/tests/unit/test_safety_repo_scope_prefixes.py +211 -0
- agentbundle-0.32.0/tests/unit/test_safety_scan_per_pack_scoping.py +473 -0
- agentbundle-0.32.0/tests/unit/test_scaffold_cmd.py +300 -0
- agentbundle-0.32.0/tests/unit/test_scope.py +186 -0
- agentbundle-0.32.0/tests/unit/test_self_host_windows.py +189 -0
- agentbundle-0.32.0/tests/unit/test_shared_prefix_disclosure.py +62 -0
- agentbundle-0.32.0/tests/unit/test_source_conflict_guard.py +585 -0
- agentbundle-0.32.0/tests/unit/test_source_defaults.py +572 -0
- agentbundle-0.32.0/tests/unit/test_state_v01_refuse_write.py +177 -0
- agentbundle-0.32.0/tests/unit/test_state_v02.py +158 -0
- agentbundle-0.32.0/tests/unit/test_state_v0_4_schema.py +227 -0
- agentbundle-0.32.0/tests/unit/test_statelock.py +111 -0
- agentbundle-0.32.0/tests/unit/test_target_resolver.py +181 -0
- agentbundle-0.32.0/tests/unit/test_toml_emitters.py +417 -0
- agentbundle-0.32.0/tests/unit/test_unresolved_markers.py +40 -0
- agentbundle-0.32.0/tests/unit/test_upgrade_bulk_all.py +1137 -0
- agentbundle-0.32.0/tests/unit/test_upgrade_recap.py +52 -0
- agentbundle-0.32.0/tests/unit/test_upgrade_source_inference.py +165 -0
- agentbundle-0.32.0/tests/unit/test_user_config_io.py +202 -0
- agentbundle-0.32.0/tests/unit/test_user_config_isolation.py +29 -0
- agentbundle-0.32.0/tests/unit/test_user_config_path.py +47 -0
- agentbundle-0.32.0/tests/unit/test_user_config_source.py +84 -0
- agentbundle-0.32.0/tests/unit/test_user_merge_json.py +420 -0
- agentbundle-0.32.0/tests/unit/test_validate_attach_to_agent.py +302 -0
- agentbundle-0.32.0/tests/unit/test_validate_categories.py +92 -0
- agentbundle-0.32.0/tests/unit/test_validate_cmd.py +329 -0
- agentbundle-0.32.0/tests/unit/test_validate_hook_wiring_per_file_compatibility.py +422 -0
- agentbundle-0.32.0/tests/unit/test_values_from_shapes.py +68 -0
- agentbundle-0.32.0/tests/unit/test_version.py +129 -0
- agentbundle-0.31.0/agentbundle.egg-info/SOURCES.txt +0 -152
- agentbundle-0.31.0/tests/test_linear_primitive.py +0 -133
- {agentbundle-0.31.0 → agentbundle-0.32.0}/README.md +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/__init__.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/__main__.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue.schema.json +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/guide.schema.json +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/install-marker.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/marketplace-entry.schema.json +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/pack.schema.json +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/plugin-manifest.schema.json +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/profile.schema.json +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/skill-manifest.schema.json +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/skill.schema.json +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/target-vocab.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/__main__.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/adapter_root_bins.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/adapters/cursor.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/adapters/gemini.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/adapters/kiro_cli.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/contract.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projection_io.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/__init__.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/direct_directory.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/gemini_command_toml.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/hook_id.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/merge_json.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/projections/user_merge_json.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/recipes/marketplace.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/recipes/self-host.toml +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/shared_libs.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/build/user_libs.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/__init__.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/archive.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/build.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/config.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/defaults.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/identity.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/initialise.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/lint.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/results.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/self_host.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/catalogue_tooling/verify.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/categories.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/cli.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/__init__.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/_common.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/_drop_warning.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/adapt.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/catalogue_build.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/catalogue_init.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/catalogue_lint.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/catalogue_package.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/catalogue_self_host.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/catalogue_verify.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/config.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/diff.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/docs.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/init_state.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/install.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/list_installed.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/list_packs.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/list_profiles.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/list_targets.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/oplog_cmd.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/pack_config_cmd.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/pack_evals.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/package_catalogue.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/profile.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/reconcile.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/render.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/scaffold.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/show.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/commands/uninstall.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/config.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/https_catalogue.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/local_exclude.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/oplog.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/pack_inventory.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/safety.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/scaffold.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/scope.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/source_defaults.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/statelock.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/user_config.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/workspace_mcp.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle.egg-info/dependency_links.txt +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle.egg-info/entry_points.txt +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle.egg-info/requires.txt +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle.egg-info/top_level.txt +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/setup.cfg +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/tests/test_adapter_permissions_projection.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/tests/test_workspace_mcp_elicit.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/tests/test_workspace_mcp_event_bridge.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/tests/test_workspace_mcp_git.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/tests/test_workspace_mcp_lifecycle.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/tests/test_workspace_mcp_stdin.py +0 -0
- {agentbundle-0.31.0 → agentbundle-0.32.0}/tests/test_workspace_mcp_tools.py +0 -0
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
graft tests
|
|
2
|
+
include conftest.py
|
|
3
|
+
graft templates
|
|
4
|
+
recursive-include agentbundle/_data/catalogue-scaffold/packs/_example/.apm *
|
|
5
|
+
recursive-include agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin *
|
|
6
|
+
prune tests/live-catalogue
|
|
7
|
+
prune tests/.pytest_cache
|
|
8
|
+
prune tests/.mypy_cache
|
|
9
|
+
prune tests/.ruff_cache
|
|
10
|
+
prune tests/.hypothesis
|
|
11
|
+
prune tests/htmlcov
|
|
12
|
+
global-exclude *.py[cod]
|
|
13
|
+
global-exclude .DS_Store
|
|
14
|
+
global-exclude .coverage
|
|
15
|
+
global-exclude .coverage.*
|
|
16
|
+
global-exclude coverage.xml
|
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentbundle
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.32.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
|
-
License: Apache-2.0 OR MIT
|
|
6
|
+
License-Expression: Apache-2.0 OR MIT
|
|
7
7
|
Project-URL: Homepage, https://github.com/eugenelim/agent-ready-repo
|
|
8
8
|
Project-URL: Source, https://github.com/eugenelim/agent-ready-repo
|
|
9
9
|
Project-URL: Documentation, https://eugenelim.github.io/agent-ready-repo/docs/
|
|
10
10
|
Project-URL: Catalogue Format, https://eugenelim.github.io/agent-ready-repo/docs/reference/catalogue-format
|
|
11
11
|
Project-URL: Changelog, https://eugenelim.github.io/agent-ready-repo/docs/changelog
|
|
12
12
|
Classifier: Development Status :: 4 - Beta
|
|
13
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
14
|
-
Classifier: License :: OSI Approved :: MIT License
|
|
15
13
|
Classifier: Operating System :: OS Independent
|
|
16
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
@@ -31,7 +29,7 @@ Requires-Dist: pyyaml>=6.0; extra == "lint"
|
|
|
31
29
|
## Quick start
|
|
32
30
|
|
|
33
31
|
```bash
|
|
34
|
-
pip install agentbundle
|
|
32
|
+
python -m pip install agentbundle
|
|
35
33
|
```
|
|
36
34
|
|
|
37
35
|
Requires Python 3.11+. Runs on macOS, Linux, and Windows.
|
|
@@ -52,8 +50,36 @@ agentbundle install --pack desk-research --scope user
|
|
|
52
50
|
|
|
53
51
|
User-scope packs land in your home directory, not the repo — they're yours, not the team's, and they're there in every project you open.
|
|
54
52
|
|
|
53
|
+
**Try a pack without committing it** — so the pack is live in this clone while
|
|
54
|
+
`git status` stays clean:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
agentbundle install --pack core --scope local
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Local scope projects the same runtime files as repo scope, then records them in
|
|
61
|
+
`.git/info/exclude`. It requires a Git work tree. Uninstalling removes both the
|
|
62
|
+
projected files and the managed exclude entries; local and repo installs of the
|
|
63
|
+
same pack cannot coexist.
|
|
64
|
+
|
|
55
65
|
The install auto-detects your agent (`--adapter` overrides). Multi-IDE? Install the same pack for each agent at the same scope — they coexist, and the agents that read `.agents/skills/` (codex, cursor, gemini, copilot) share one skill copy instead of fighting over it. To install from a **different** catalogue, pass it as a trailing argument — a git URL or a local path (`agentbundle install --pack core <catalogue>`); a `config set source <catalogue>` makes that the default, and an editable clone (`pip install -e`) defaults to itself.
|
|
56
66
|
|
|
67
|
+
## Claude Code marketplace
|
|
68
|
+
|
|
69
|
+
Claude Code users can install any pack that permits user scope without first
|
|
70
|
+
installing this CLI:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
claude plugin marketplace add eugenelim/agent-ready-repo
|
|
74
|
+
claude plugin install architect@agent-ready-repo
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
The marketplace excludes repo-only packs because Claude plugins live in a
|
|
78
|
+
global cache. Install `core` and other repo-only packs with `agentbundle` so
|
|
79
|
+
their files land in the project. For hook-bearing user-scope packs, the
|
|
80
|
+
generated marketplace description lists the authored hook event, matcher,
|
|
81
|
+
timeout, interpreter, and body path before publication.
|
|
82
|
+
|
|
57
83
|
## More commands
|
|
58
84
|
|
|
59
85
|
```bash
|
|
@@ -200,10 +226,10 @@ Artifactory bootstrap and editable-install detection entirely. `agentbundle` fal
|
|
|
200
226
|
straight through to the packaged default, so hosts without network access to Artifactory
|
|
201
227
|
still resolve a source without errors.
|
|
202
228
|
|
|
203
|
-
See
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
229
|
+
See [Configure catalogue enterprise
|
|
230
|
+
distribution](https://github.com/eugenelim/agent-ready-repo/blob/main/guides/_shared/how-to/configure-catalogue-enterprise-distribution.md)
|
|
231
|
+
for channel setup, authentication, CI upgrades, disconnected hosts, and the
|
|
232
|
+
security boundary.
|
|
207
233
|
|
|
208
234
|
## Build your own catalogue
|
|
209
235
|
|
|
@@ -250,6 +276,7 @@ my-pack/
|
|
|
250
276
|
evals/ # activation + output-quality evals, skill-local
|
|
251
277
|
agents/<name>.md # subagents
|
|
252
278
|
hooks/<name>.py # lifecycle hooks
|
|
279
|
+
hook-wiring/<name>.toml # adapter event wiring for a shipped hook body
|
|
253
280
|
tests/ # implementation tests — NEVER projected
|
|
254
281
|
skills/<name>/
|
|
255
282
|
hooks/
|
|
@@ -278,6 +305,12 @@ on the published distribution branch, and every entry is schema-validated at
|
|
|
278
305
|
build time against `marketplace-entry.schema.json`. Extra fields stay in `pack.toml`; the projection
|
|
279
306
|
is deliberately lossy per tool.
|
|
280
307
|
|
|
308
|
+
A hook-bearing pack that permits user scope must explicitly set
|
|
309
|
+
`[pack.install] user-scope-hooks = true`. On the Claude-plugin route,
|
|
310
|
+
`agentbundle` compiles supported Claude-shaped wiring into native plugin hooks
|
|
311
|
+
and rejects unsafe event, matcher, timeout, command, or body-path shapes before
|
|
312
|
+
creating output. Direct CLI installs keep their adapter-native wiring contract.
|
|
313
|
+
|
|
281
314
|
Point a catalogue URI (a git URL or a local path) at the repo that holds your packs. Then `validate` a pack against the adapter contract, `render` it to preview the projection, and `install` it into a target repo. `scaffold` drops a pack's seeds into a fresh directory to start from. The build pipeline (`agentbundle.build`) is the same engine `make build` runs.
|
|
282
315
|
|
|
283
316
|
**Org adapter default:** If your org ships a private `agentbundle` wheel (or a fork pinned to your internal catalogue), you can set a default adapter for all developers without requiring them to run `agentbundle config set` or pass `--adapter` on every install. Add an `[organization]` table to `_data/install-defaults.toml` in your fork:
|
|
@@ -287,7 +320,7 @@ Point a catalogue URI (a git URL or a local path) at the repo that holds your pa
|
|
|
287
320
|
preferred_adapter = "cursor"
|
|
288
321
|
```
|
|
289
322
|
|
|
290
|
-
The org hint fires after the user-config but before the on-disk IDE probe — so `--adapter`, user-config, and upgrade state-hints all take priority. An invalid value exits 1 before writing anything. See the [`agentbundle` reference](https://github.com/eugenelim/agent-ready-repo/blob/main/
|
|
323
|
+
The org hint fires after the user-config but before the on-disk IDE probe — so `--adapter`, user-config, and upgrade state-hints all take priority. An invalid value exits 1 before writing anything. See the [`agentbundle` reference](https://github.com/eugenelim/agent-ready-repo/blob/main/guides/_shared/reference/agentbundle.md#org-adapter-default) for the full cascade.
|
|
291
324
|
|
|
292
325
|
**Bundled contracts** — the wheel ships the machine contracts used for offline validation:
|
|
293
326
|
`pack.schema.json`, `skill.schema.json`, `guide.schema.json`, `skill-manifest.schema.json`,
|
|
@@ -348,7 +381,7 @@ When `preferred-adapter` names an adapter not in the upstream `SELF_HOST_ADAPTER
|
|
|
348
381
|
agentbundle pack evals run --pack <pack-name> --catalogue-root .
|
|
349
382
|
```
|
|
350
383
|
|
|
351
|
-
See the [pack layout reference](https://github.com/eugenelim/agent-ready-repo/blob/main/docs/architecture/pack-layout.md) and [authoring a skill](https://github.com/eugenelim/agent-ready-repo/blob/main/
|
|
384
|
+
See the [pack layout reference](https://github.com/eugenelim/agent-ready-repo/blob/main/docs/architecture/pack-layout.md) and [authoring a skill](https://github.com/eugenelim/agent-ready-repo/blob/main/guides/_shared/how-to/author-a-skill.md).
|
|
352
385
|
|
|
353
386
|
## Catalogue defaults and pack config API
|
|
354
387
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
## Quick start
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
pip install agentbundle
|
|
12
|
+
python -m pip install agentbundle
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
Requires Python 3.11+. Runs on macOS, Linux, and Windows.
|
|
@@ -30,8 +30,36 @@ agentbundle install --pack desk-research --scope user
|
|
|
30
30
|
|
|
31
31
|
User-scope packs land in your home directory, not the repo — they're yours, not the team's, and they're there in every project you open.
|
|
32
32
|
|
|
33
|
+
**Try a pack without committing it** — so the pack is live in this clone while
|
|
34
|
+
`git status` stays clean:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
agentbundle install --pack core --scope local
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
Local scope projects the same runtime files as repo scope, then records them in
|
|
41
|
+
`.git/info/exclude`. It requires a Git work tree. Uninstalling removes both the
|
|
42
|
+
projected files and the managed exclude entries; local and repo installs of the
|
|
43
|
+
same pack cannot coexist.
|
|
44
|
+
|
|
33
45
|
The install auto-detects your agent (`--adapter` overrides). Multi-IDE? Install the same pack for each agent at the same scope — they coexist, and the agents that read `.agents/skills/` (codex, cursor, gemini, copilot) share one skill copy instead of fighting over it. To install from a **different** catalogue, pass it as a trailing argument — a git URL or a local path (`agentbundle install --pack core <catalogue>`); a `config set source <catalogue>` makes that the default, and an editable clone (`pip install -e`) defaults to itself.
|
|
34
46
|
|
|
47
|
+
## Claude Code marketplace
|
|
48
|
+
|
|
49
|
+
Claude Code users can install any pack that permits user scope without first
|
|
50
|
+
installing this CLI:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
claude plugin marketplace add eugenelim/agent-ready-repo
|
|
54
|
+
claude plugin install architect@agent-ready-repo
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The marketplace excludes repo-only packs because Claude plugins live in a
|
|
58
|
+
global cache. Install `core` and other repo-only packs with `agentbundle` so
|
|
59
|
+
their files land in the project. For hook-bearing user-scope packs, the
|
|
60
|
+
generated marketplace description lists the authored hook event, matcher,
|
|
61
|
+
timeout, interpreter, and body path before publication.
|
|
62
|
+
|
|
35
63
|
## More commands
|
|
36
64
|
|
|
37
65
|
```bash
|
|
@@ -178,10 +206,10 @@ Artifactory bootstrap and editable-install detection entirely. `agentbundle` fal
|
|
|
178
206
|
straight through to the packaged default, so hosts without network access to Artifactory
|
|
179
207
|
still resolve a source without errors.
|
|
180
208
|
|
|
181
|
-
See
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
209
|
+
See [Configure catalogue enterprise
|
|
210
|
+
distribution](https://github.com/eugenelim/agent-ready-repo/blob/main/guides/_shared/how-to/configure-catalogue-enterprise-distribution.md)
|
|
211
|
+
for channel setup, authentication, CI upgrades, disconnected hosts, and the
|
|
212
|
+
security boundary.
|
|
185
213
|
|
|
186
214
|
## Build your own catalogue
|
|
187
215
|
|
|
@@ -228,6 +256,7 @@ my-pack/
|
|
|
228
256
|
evals/ # activation + output-quality evals, skill-local
|
|
229
257
|
agents/<name>.md # subagents
|
|
230
258
|
hooks/<name>.py # lifecycle hooks
|
|
259
|
+
hook-wiring/<name>.toml # adapter event wiring for a shipped hook body
|
|
231
260
|
tests/ # implementation tests — NEVER projected
|
|
232
261
|
skills/<name>/
|
|
233
262
|
hooks/
|
|
@@ -256,6 +285,12 @@ on the published distribution branch, and every entry is schema-validated at
|
|
|
256
285
|
build time against `marketplace-entry.schema.json`. Extra fields stay in `pack.toml`; the projection
|
|
257
286
|
is deliberately lossy per tool.
|
|
258
287
|
|
|
288
|
+
A hook-bearing pack that permits user scope must explicitly set
|
|
289
|
+
`[pack.install] user-scope-hooks = true`. On the Claude-plugin route,
|
|
290
|
+
`agentbundle` compiles supported Claude-shaped wiring into native plugin hooks
|
|
291
|
+
and rejects unsafe event, matcher, timeout, command, or body-path shapes before
|
|
292
|
+
creating output. Direct CLI installs keep their adapter-native wiring contract.
|
|
293
|
+
|
|
259
294
|
Point a catalogue URI (a git URL or a local path) at the repo that holds your packs. Then `validate` a pack against the adapter contract, `render` it to preview the projection, and `install` it into a target repo. `scaffold` drops a pack's seeds into a fresh directory to start from. The build pipeline (`agentbundle.build`) is the same engine `make build` runs.
|
|
260
295
|
|
|
261
296
|
**Org adapter default:** If your org ships a private `agentbundle` wheel (or a fork pinned to your internal catalogue), you can set a default adapter for all developers without requiring them to run `agentbundle config set` or pass `--adapter` on every install. Add an `[organization]` table to `_data/install-defaults.toml` in your fork:
|
|
@@ -265,7 +300,7 @@ Point a catalogue URI (a git URL or a local path) at the repo that holds your pa
|
|
|
265
300
|
preferred_adapter = "cursor"
|
|
266
301
|
```
|
|
267
302
|
|
|
268
|
-
The org hint fires after the user-config but before the on-disk IDE probe — so `--adapter`, user-config, and upgrade state-hints all take priority. An invalid value exits 1 before writing anything. See the [`agentbundle` reference](https://github.com/eugenelim/agent-ready-repo/blob/main/
|
|
303
|
+
The org hint fires after the user-config but before the on-disk IDE probe — so `--adapter`, user-config, and upgrade state-hints all take priority. An invalid value exits 1 before writing anything. See the [`agentbundle` reference](https://github.com/eugenelim/agent-ready-repo/blob/main/guides/_shared/reference/agentbundle.md#org-adapter-default) for the full cascade.
|
|
269
304
|
|
|
270
305
|
**Bundled contracts** — the wheel ships the machine contracts used for offline validation:
|
|
271
306
|
`pack.schema.json`, `skill.schema.json`, `guide.schema.json`, `skill-manifest.schema.json`,
|
|
@@ -326,7 +361,7 @@ When `preferred-adapter` names an adapter not in the upstream `SELF_HOST_ADAPTER
|
|
|
326
361
|
agentbundle pack evals run --pack <pack-name> --catalogue-root .
|
|
327
362
|
```
|
|
328
363
|
|
|
329
|
-
See the [pack layout reference](https://github.com/eugenelim/agent-ready-repo/blob/main/docs/architecture/pack-layout.md) and [authoring a skill](https://github.com/eugenelim/agent-ready-repo/blob/main/
|
|
364
|
+
See the [pack layout reference](https://github.com/eugenelim/agent-ready-repo/blob/main/docs/architecture/pack-layout.md) and [authoring a skill](https://github.com/eugenelim/agent-ready-repo/blob/main/guides/_shared/how-to/author-a-skill.md).
|
|
330
365
|
|
|
331
366
|
## Catalogue defaults and pack config API
|
|
332
367
|
|
|
@@ -54,6 +54,25 @@
|
|
|
54
54
|
]
|
|
55
55
|
},
|
|
56
56
|
"target-path": {"type": "string"},
|
|
57
|
+
"plugin-target-path": {"type": "string"},
|
|
58
|
+
"plugin-mode": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"enum": [
|
|
61
|
+
"direct-directory",
|
|
62
|
+
"direct-file",
|
|
63
|
+
"merge-json",
|
|
64
|
+
"user-merge-json",
|
|
65
|
+
"merge-into-agent-json",
|
|
66
|
+
"instruction-file",
|
|
67
|
+
"managed-block-inline",
|
|
68
|
+
"degraded-info-log",
|
|
69
|
+
"dropped",
|
|
70
|
+
"codex-agent-toml",
|
|
71
|
+
"copilot-agent-md",
|
|
72
|
+
"copilot-hooks-json",
|
|
73
|
+
"gemini-command-toml"
|
|
74
|
+
]
|
|
75
|
+
},
|
|
57
76
|
"on-conflict": {
|
|
58
77
|
"type": "string",
|
|
59
78
|
"enum": [
|
|
@@ -90,7 +90,10 @@
|
|
|
90
90
|
# reader cohort. cursor/gemini/copilot route the `skill` primitive to the shared
|
|
91
91
|
# `.agents/skills/` home (joining codex) and gain it in `allowed-prefixes` at
|
|
92
92
|
# both scopes; their agent/hook/command projection stays native.
|
|
93
|
-
|
|
93
|
+
# v0.18 (Claude-plugin hook parity): `hook-body` gains the plugin-root
|
|
94
|
+
# `hooks/` target and `hook-wiring` is dropped from the ordinary projection on
|
|
95
|
+
# that route after its entries are compiled into plugin.json.
|
|
96
|
+
version = "0.18"
|
|
94
97
|
|
|
95
98
|
# Sibling schemas this contract references — pack metadata and the
|
|
96
99
|
# per-pack Claude-plugin manifest.
|
|
@@ -202,11 +205,13 @@ on-conflict = "prompt-then-preserve"
|
|
|
202
205
|
primitive = "hook-body"
|
|
203
206
|
mode = "direct-file"
|
|
204
207
|
target-path = "tools/hooks/"
|
|
208
|
+
plugin-target-path = "hooks/"
|
|
205
209
|
on-conflict = "prompt-then-preserve"
|
|
206
210
|
|
|
207
211
|
[[adapter."claude-code".projection]]
|
|
208
212
|
primitive = "hook-wiring"
|
|
209
213
|
mode = "merge-json"
|
|
214
|
+
plugin-mode = "dropped"
|
|
210
215
|
target-path = ".claude/settings.local.json"
|
|
211
216
|
managed-key = "hooks"
|
|
212
217
|
on-conflict = "merge-managed-key-only"
|
{agentbundle-0.31.0 → agentbundle-0.32.0}/agentbundle/_data/catalogue-scaffold/manifest.json
RENAMED
|
@@ -12,7 +12,10 @@
|
|
|
12
12
|
"profiles/AGENTS.md": "8950438d9e0f57c13613104c88c90b598b53196c91bfdced6d63e4e01b5e9254",
|
|
13
13
|
"profiles/README.md": "a0b0268edc57fc575f7fea08f3363ba7da9f6e67dc4a0a6f8bd38c9668c97922",
|
|
14
14
|
"profiles/_example/README.md": "164494df049ddce3e57cb44ed604cb3d39be0a6ec2072e609ea3fa4bbfc74c72",
|
|
15
|
-
"profiles/_example/profile.toml": "68af18cf50fa0327a9776b029c92bb1cf82710c649691b3ac889eb8537b8eac7"
|
|
15
|
+
"profiles/_example/profile.toml": "68af18cf50fa0327a9776b029c92bb1cf82710c649691b3ac889eb8537b8eac7",
|
|
16
|
+
"tests/conformance/test_gemini_admissibility.py": "8b337da9272823aed2cb22041b3f9fd27549f075f28b9817efd5be8f8c5bb948",
|
|
17
|
+
"tests/conformance/test_pack_metadata.py": "8ea175b88cc6e10ba10cda87676fc225ee2b968d710c8e6ab05fb20e31ec978a",
|
|
18
|
+
"tests/conformance/test_shared_library_boundaries.py": "5e07783459336e657a355f43aa5a9cf6c138603624daec258ecc0fa3d74239c3"
|
|
16
19
|
},
|
|
17
20
|
"version": 1
|
|
18
21
|
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: example-skill
|
|
3
|
+
description: "Demonstrate the standard skill layout. Triggers on: run example, show example skill output. Near-miss: requesting a demo or test of any skill (route those to the specific skill)."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Example Skill
|
|
7
|
+
|
|
8
|
+
This skill is a minimal demonstration of the standard SKILL.md layout. Replace this content
|
|
9
|
+
with your skill's actual instructions.
|
|
10
|
+
|
|
11
|
+
## What it does
|
|
12
|
+
|
|
13
|
+
Produces a short greeting and lists any files the user has mentioned.
|
|
14
|
+
|
|
15
|
+
## When to use this skill
|
|
16
|
+
|
|
17
|
+
The agent invokes this skill when the user asks to "run example" or "show example skill output".
|
|
18
|
+
|
|
19
|
+
## Steps
|
|
20
|
+
|
|
21
|
+
1. Greet the user.
|
|
22
|
+
2. List any files mentioned in the conversation.
|
|
23
|
+
3. Summarize what the example-skill would do in a real pack.
|
|
24
|
+
|
|
25
|
+
## Output
|
|
26
|
+
|
|
27
|
+
A short greeting and a bullet list.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[
|
|
2
|
+
{
|
|
3
|
+
"query": "run example",
|
|
4
|
+
"skill": "example-skill",
|
|
5
|
+
"should_trigger": true
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
"query": "show example skill output",
|
|
9
|
+
"skill": "example-skill",
|
|
10
|
+
"should_trigger": true
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"query": "what does example-skill do",
|
|
14
|
+
"skill": "example-skill",
|
|
15
|
+
"should_trigger": true
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"query": "demonstrate the example",
|
|
19
|
+
"skill": "example-skill",
|
|
20
|
+
"should_trigger": true
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"query": "run the example skill now",
|
|
24
|
+
"skill": "example-skill",
|
|
25
|
+
"should_trigger": true
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"query": "give me a demo",
|
|
29
|
+
"skill": "example-skill",
|
|
30
|
+
"should_trigger": false
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"query": "show me a test run of architect-design",
|
|
34
|
+
"skill": "example-skill",
|
|
35
|
+
"should_trigger": false
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
"query": "how do I install a pack",
|
|
39
|
+
"skill": "example-skill",
|
|
40
|
+
"should_trigger": false
|
|
41
|
+
}
|
|
42
|
+
]
|
agentbundle-0.32.0/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "example-pack",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "The skeleton to copy when you start a new pack.",
|
|
5
|
+
"displayName": "Example Pack",
|
|
6
|
+
"category": "productivity",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"example",
|
|
9
|
+
"template"
|
|
10
|
+
],
|
|
11
|
+
"skills": [
|
|
12
|
+
"example-skill"
|
|
13
|
+
]
|
|
14
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"""Portable Gemini adapter rules over every pack in a catalogue."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import tomllib
|
|
6
|
+
from importlib.resources import files
|
|
7
|
+
from pathlib import Path
|
|
8
|
+
|
|
9
|
+
CATALOGUE_ROOT = Path(__file__).resolve().parents[2]
|
|
10
|
+
PACKS_DIR = CATALOGUE_ROOT / "packs"
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _adapter_contract() -> dict:
|
|
14
|
+
"""Load the runtime adapter contract from the installed engine data."""
|
|
15
|
+
resource = files("agentbundle").joinpath("_data", "adapter.toml")
|
|
16
|
+
return tomllib.loads(resource.read_text(encoding="utf-8"))
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
def _pack_dirs() -> list[Path]:
|
|
20
|
+
return sorted(
|
|
21
|
+
path
|
|
22
|
+
for path in PACKS_DIR.iterdir()
|
|
23
|
+
if path.is_dir()
|
|
24
|
+
and not path.name.startswith("_")
|
|
25
|
+
and (path / "pack.toml").is_file()
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_every_declared_agent_tool_is_mapped() -> None:
|
|
30
|
+
declared: set[str] = set()
|
|
31
|
+
for agent_path in PACKS_DIR.glob("*/.apm/agents/*.md"):
|
|
32
|
+
for line in agent_path.read_text(encoding="utf-8").splitlines():
|
|
33
|
+
if line.startswith("tools:"):
|
|
34
|
+
declared.update(
|
|
35
|
+
item.strip()
|
|
36
|
+
for item in line.split(":", 1)[1].split(",")
|
|
37
|
+
if item.strip()
|
|
38
|
+
)
|
|
39
|
+
if not declared:
|
|
40
|
+
return
|
|
41
|
+
contract = _adapter_contract()
|
|
42
|
+
values = contract["frontmatter-mapping"]["gemini-agent-frontmatter"]["tools"][
|
|
43
|
+
"values"
|
|
44
|
+
]
|
|
45
|
+
assert declared <= set(values), f"unmapped agent tools: {declared - set(values)}"
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def test_every_compatible_pack_admits_gemini_in_both_scopes() -> None:
|
|
49
|
+
from agentbundle.commands.install import _resolve_target_adapter
|
|
50
|
+
|
|
51
|
+
for pack_dir in _pack_dirs():
|
|
52
|
+
data = tomllib.loads((pack_dir / "pack.toml").read_text(encoding="utf-8"))
|
|
53
|
+
pack = data["pack"]
|
|
54
|
+
allowed = pack.get("install", {}).get("allowed-adapters")
|
|
55
|
+
if allowed is not None and "gemini" not in allowed:
|
|
56
|
+
continue
|
|
57
|
+
contract_version = pack.get("adapter-contract", {}).get("version", "0.13")
|
|
58
|
+
for scope in ("repo", "user"):
|
|
59
|
+
resolved = _resolve_target_adapter(
|
|
60
|
+
pack_dir,
|
|
61
|
+
scope=scope,
|
|
62
|
+
adapter="gemini",
|
|
63
|
+
allowed_adapters=allowed,
|
|
64
|
+
contract_version=contract_version,
|
|
65
|
+
command_name="install",
|
|
66
|
+
)
|
|
67
|
+
assert resolved == "gemini", f"{pack_dir.name} @ {scope}"
|
agentbundle-0.32.0/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"""Portable catalogue manifest and marketplace rules."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
import tomllib
|
|
7
|
+
from importlib.resources import files
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
import pytest
|
|
11
|
+
|
|
12
|
+
CATALOGUE_ROOT = Path(__file__).resolve().parents[2]
|
|
13
|
+
PACKS_DIR = CATALOGUE_ROOT / "packs"
|
|
14
|
+
MARKETPLACE_PATH = CATALOGUE_ROOT / ".claude-plugin" / "marketplace.json"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def _bundled_schema(name: str) -> dict:
|
|
18
|
+
"""Load a runtime schema without requiring a source-checkout contract tree."""
|
|
19
|
+
resource = files("agentbundle").joinpath("_data", name)
|
|
20
|
+
return json.loads(resource.read_text(encoding="utf-8"))
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
def _pack_dirs() -> list[Path]:
|
|
24
|
+
return sorted(
|
|
25
|
+
path
|
|
26
|
+
for path in PACKS_DIR.iterdir()
|
|
27
|
+
if path.is_dir()
|
|
28
|
+
and not path.name.startswith("_")
|
|
29
|
+
and (path / "pack.toml").is_file()
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
def _pack_data(pack_dir: Path) -> dict:
|
|
34
|
+
return tomllib.loads((pack_dir / "pack.toml").read_text(encoding="utf-8"))[
|
|
35
|
+
"pack"
|
|
36
|
+
]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@pytest.mark.parametrize("pack_dir", _pack_dirs(), ids=lambda path: path.name)
|
|
40
|
+
def test_pack_declares_enriched_metadata(pack_dir: Path) -> None:
|
|
41
|
+
pack = _pack_data(pack_dir)
|
|
42
|
+
assert pack.get("readme") == "README.md", f"{pack_dir.name}: readme"
|
|
43
|
+
assert (pack_dir / "README.md").is_file(), f"{pack_dir.name}: README.md"
|
|
44
|
+
assert isinstance(pack.get("license"), str) and pack["license"]
|
|
45
|
+
links = pack.get("links")
|
|
46
|
+
assert isinstance(links, dict)
|
|
47
|
+
assert isinstance(links.get("repository"), str) and links["repository"]
|
|
48
|
+
for field in ("categories", "keywords"):
|
|
49
|
+
values = pack.get(field)
|
|
50
|
+
assert isinstance(values, list) and values, f"{pack_dir.name}: {field}"
|
|
51
|
+
assert len(values) <= 5, f"{pack_dir.name}: {field} capped at 5"
|
|
52
|
+
maintainers = pack.get("maintainers")
|
|
53
|
+
assert isinstance(maintainers, list) and maintainers
|
|
54
|
+
assert isinstance(maintainers[0].get("name"), str) and maintainers[0]["name"]
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
@pytest.mark.parametrize("pack_dir", _pack_dirs(), ids=lambda path: path.name)
|
|
58
|
+
def test_pack_and_plugin_versions_match(pack_dir: Path) -> None:
|
|
59
|
+
plugin_path = pack_dir / ".claude-plugin" / "plugin.json"
|
|
60
|
+
if not plugin_path.exists():
|
|
61
|
+
return
|
|
62
|
+
plugin = json.loads(plugin_path.read_text(encoding="utf-8"))
|
|
63
|
+
assert plugin.get("version") == _pack_data(pack_dir)["version"]
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
def test_source_plugin_manifests_obey_schema() -> None:
|
|
67
|
+
from agentbundle.build.validate import validate
|
|
68
|
+
|
|
69
|
+
manifests = sorted(
|
|
70
|
+
path
|
|
71
|
+
for pack_dir in _pack_dirs()
|
|
72
|
+
if (path := pack_dir / ".claude-plugin" / "plugin.json").is_file()
|
|
73
|
+
)
|
|
74
|
+
if not manifests:
|
|
75
|
+
return
|
|
76
|
+
schema = _bundled_schema("plugin-manifest.schema.json")
|
|
77
|
+
for path in manifests:
|
|
78
|
+
content = json.loads(path.read_text(encoding="utf-8"))
|
|
79
|
+
assert "hooks" not in content, f"{path.relative_to(CATALOGUE_ROOT)}: hooks"
|
|
80
|
+
errors = validate(content, schema)
|
|
81
|
+
assert not errors, f"{path.relative_to(CATALOGUE_ROOT)}: {errors}"
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
def test_root_marketplace_entries_obey_schema() -> None:
|
|
85
|
+
from agentbundle.build.validate import validate
|
|
86
|
+
|
|
87
|
+
if not MARKETPLACE_PATH.is_file():
|
|
88
|
+
return
|
|
89
|
+
marketplace = json.loads(MARKETPLACE_PATH.read_text(encoding="utf-8"))
|
|
90
|
+
entries = marketplace.get("plugins", [])
|
|
91
|
+
if not entries:
|
|
92
|
+
return
|
|
93
|
+
schema = _bundled_schema("marketplace-entry.schema.json")
|
|
94
|
+
for entry in entries:
|
|
95
|
+
assert not validate(entry, schema), entry.get("name", "<unnamed>")
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def test_root_marketplace_has_portable_metadata_shapes() -> None:
|
|
99
|
+
if not MARKETPLACE_PATH.is_file():
|
|
100
|
+
return
|
|
101
|
+
marketplace = json.loads(MARKETPLACE_PATH.read_text(encoding="utf-8"))
|
|
102
|
+
assert "name" in marketplace
|
|
103
|
+
assert isinstance(marketplace.get("owner"), dict)
|
|
104
|
+
for plugin in marketplace.get("plugins", []):
|
|
105
|
+
assert isinstance(plugin.get("author"), dict), plugin.get("name")
|
|
106
|
+
source = plugin.get("source")
|
|
107
|
+
if source is None:
|
|
108
|
+
continue
|
|
109
|
+
assert isinstance(source, dict), plugin.get("name")
|
|
110
|
+
assert source.get("source") == "git-subdir", plugin.get("name")
|
|
111
|
+
assert isinstance(source.get("url"), str) and source["url"].startswith(
|
|
112
|
+
"https://github.com/"
|
|
113
|
+
)
|
|
114
|
+
assert source.get("path")
|
|
115
|
+
assert source.get("ref") or source.get("sha")
|
|
116
|
+
assert "branch" not in source and "directory" not in source
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""Portable rules for retired credential-shim copies in pack scripts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import re
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
CATALOGUE_ROOT = Path(__file__).resolve().parents[2]
|
|
9
|
+
PACKS_DIR = CATALOGUE_ROOT / "packs"
|
|
10
|
+
SHIM_BASENAMES = (
|
|
11
|
+
"credentials_shim.py",
|
|
12
|
+
"_keychain_macos.py",
|
|
13
|
+
"_credman_windows.py",
|
|
14
|
+
)
|
|
15
|
+
SHIM_IMPORT_RE = re.compile(
|
|
16
|
+
r"(?:from\s+\.{0,2}(?:[\w.]+\.)?credentials_shim\s+import"
|
|
17
|
+
r"|import\s+(?:[\w.]+\.)?credentials_shim\b)"
|
|
18
|
+
)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_no_pack_skill_carries_a_retired_shim_copy() -> None:
|
|
22
|
+
offenders = [
|
|
23
|
+
str(path.relative_to(CATALOGUE_ROOT))
|
|
24
|
+
for scripts_dir in PACKS_DIR.glob("*/.apm/skills/*/scripts")
|
|
25
|
+
for basename in SHIM_BASENAMES
|
|
26
|
+
if (path := scripts_dir / basename).exists()
|
|
27
|
+
]
|
|
28
|
+
assert not offenders, offenders
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def test_no_pack_skill_imports_the_retired_shim() -> None:
|
|
32
|
+
offenders: list[str] = []
|
|
33
|
+
for path in PACKS_DIR.glob("*/.apm/skills/*/scripts/*.py"):
|
|
34
|
+
try:
|
|
35
|
+
source = path.read_text(encoding="utf-8")
|
|
36
|
+
except OSError:
|
|
37
|
+
continue
|
|
38
|
+
if SHIM_IMPORT_RE.search(source):
|
|
39
|
+
offenders.append(str(path.relative_to(CATALOGUE_ROOT)))
|
|
40
|
+
assert not offenders, offenders
|