agentbundle 0.32.0__tar.gz → 0.33.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/agentbundle.egg-info → agentbundle-0.33.0}/PKG-INFO +16 -3
- {agentbundle-0.32.0 → agentbundle-0.33.0}/README-pypi.md +15 -2
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/self_host.py +10 -5
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/archive.py +67 -41
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/config.py +2 -2
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/lint.py +104 -31
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/verify.py +76 -33
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/https_catalogue.py +34 -11
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/source_defaults.py +22 -9
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/version.py +1 -1
- {agentbundle-0.32.0 → agentbundle-0.33.0/agentbundle.egg-info}/PKG-INFO +16 -3
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle.egg-info/SOURCES.txt +2 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/pyproject.toml +1 -1
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/README.md +5 -0
- agentbundle-0.33.0/tests/build_pipeline/fixtures/claude-code-2.1.226-hook-events.json +45 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_hook_wiring_rules.py +8 -13
- agentbundle-0.33.0/tests/fixtures/blank_catalogue/catalogue.toml +35 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_editable_source_detection.py +10 -7
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_default_source.py +14 -2
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_show_cmd.py +17 -5
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_archive.py +44 -9
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_foundation.py +13 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_lint.py +163 -10
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_package.py +35 -16
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_self_host.py +25 -6
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_verify.py +35 -14
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_wave2_validation.py +17 -2
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_https_catalogue.py +39 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_package_catalogue.py +32 -6
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_source_defaults.py +33 -2
- {agentbundle-0.32.0 → agentbundle-0.33.0}/MANIFEST.in +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/__main__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/adapter.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/adapter.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/manifest.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/evals/eval_queries.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_gemini_admissibility.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_shared_library_boundaries.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/catalogue.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/guide.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/install-marker.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/marketplace-entry.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/pack.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/plugin-manifest.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/profile.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/skill-manifest.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/skill.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/_data/target-vocab.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/__main__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/adapter_root_bins.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/adapters/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/adapters/claude_code.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/adapters/codex.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/adapters/copilot.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/adapters/cursor.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/adapters/gemini.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/adapters/kiro.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/adapters/kiro_cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/adapters/kiro_ide.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/contract.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/hook_wiring_rules.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/lint_packs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/main.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/phase_order.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projection_io.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/codex_agent_toml.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/copilot_agent_md.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/direct_directory.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/gemini_command_toml.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/hook_id.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/merge_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/plugin_hooks.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/projections/user_merge_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/recipes/marketplace.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/recipes/self-host.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/scope_rails.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/shared_libs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/target_resolver.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/user_libs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/build/validate.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/build.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/defaults.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/file_safety.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/identity.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/initialise.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/package.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/results.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/self_host.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/categories.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/_common.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/_drop_warning.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/adapt.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/catalogue_build.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/catalogue_init.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/catalogue_lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/catalogue_package.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/catalogue_self_host.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/catalogue_verify.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/diff.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/docs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/init_state.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/list_installed.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/list_packs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/list_profiles.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/list_targets.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/oplog_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/pack_config_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/pack_evals.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/package_catalogue.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/profile.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/reconcile.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/render.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/scaffold.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/show.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/uninstall.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/upgrade.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/commands/validate.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/local_exclude.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/oplog.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/pack_inventory.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/render.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/safety.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/scaffold.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/statelock.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/user_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle/workspace_mcp.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle.egg-info/dependency_links.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle.egg-info/entry_points.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle.egg-info/requires.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/agentbundle.egg-info/top_level.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/conftest.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/setup.cfg +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/templates/install-marker.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/_support.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/core/.apm/agents/bar.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/core/.apm/commands/qux.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/baz.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/qux.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/core/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/core/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/governance-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/governance-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/governance-extras/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/monorepo-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/monorepo-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/monorepo-extras/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/product-documentation/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/product-documentation/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/product-documentation/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/fixtures/recipes/bogus-target.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_adapter_claude_code.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_adapter_codex.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_adapter_copilot.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_adapter_cursor.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_adapter_gemini.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_adapter_kiro.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_adapter_kiro_alias.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_adapter_kiro_cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_adapter_kiro_ide.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_adapter_root_bins_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_build_ships_seeds.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_contract.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_contract_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_contract_v07.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_contract_v08.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_direct_directory_cleanup.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_end_to_end_build.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_lint_packs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_load_pack_hook_wiring_safely.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_pack_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_pack_schema_allowed_adapters.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_pack_schema_install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_pipeline.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_plugin_hooks.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_plugin_manifest_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_projectable_subset.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_projections_merge_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_scope_rails.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_security.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_self_host_check.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_self_host_fixture_guard.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_self_host_recipe_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_shared_libs_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_shared_prefix_contract.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_user_libs_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_validate.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/build_pipeline/test_writers_emit_lf.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/conftest.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/adapt/.adapt-discovery.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/adapt/values.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/blank_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/blank_catalogue/packs/.gitkeep +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/blank_catalogue/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/blank_catalogue/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/blank_catalogue/packs/_example/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/blank_catalogue/packs/_example/evals/eval_queries.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/blank_catalogue/packs/_example/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/blank_catalogue/profiles/.gitkeep +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/blank_catalogue/profiles/_example/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/blank_catalogue/profiles/_example/profile.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield/values.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt/AGENTS.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt/AGENTS.upstream.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt/DESIGN.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt/EXPECTED_TREE.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt/docs/CHARTER.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt/docs/guides/how-to/index.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt/docs/howto/getting-started.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt-expected/AGENTS.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt-expected/docs/CHARTER.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/.adapt-discovery.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/state.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/argv-flag/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/argv-flag/scripts/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/argv-flag-derived/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/argv-flag-derived/scripts/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/argv-flag-normalised/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/argv-flag-normalised/scripts/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/conforming/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/conforming/scripts/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/dotfile-grep/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/dotfile-grep/scripts/leak.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/dotfile-with-optout/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/dotfile-with-optout/scripts/legit.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/mcp-server-headers/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/mcp-server-headers/scripts/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/creds/skills/missing-dont-block/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/install/catalogue/packs/alpha/.apm/agents/helper.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/install/catalogue/packs/alpha/.apm/commands/cmd.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/install/catalogue/packs/alpha/.apm/hook-wiring/run.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/install/catalogue/packs/alpha/.apm/hooks/run.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/install/catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/install/catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/install/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/kiro_ide_hook/ask_agent_basic.kiro.hook +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/kiro_ide_hook/run_command_with_placeholder.kiro.hook +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/lint_packs/clean/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/lint_packs/clean/seeds/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/list-installed/golden_120col.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/list-installed/golden_80col.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/list_packs/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/list_packs/catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/.apm/skills/local-test/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/cc-user-hooks/.apm/hook-wiring/on-prompt.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/cc-user-hooks/.apm/hooks/on-prompt.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/cc-user-hooks/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/kiro-repo-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/kiro-repo-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/kiro-repo-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/kiro-repo-hooks/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/kiro-user-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/kiro-user-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/kiro-user-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/kiro-user-hooks/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-missing-attach/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-pascal-events/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/packs/malformed-kiro-unknown-agent/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/scaffold/test-pack/seeds/AGENTS.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/scaffold/test-pack/seeds/_agents-footer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/scaffold/test-pack/seeds/docs/CHARTER.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/validate/bad_recipe_pack/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/validate/malformed_pack/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/validate/valid_pack/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/fixtures/validate/version_mismatch_pack/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_adapt_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_adapt_dual_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_adapt_preflight_detection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_adapt_schema_migration.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_apm_install_route.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_blank_catalogue.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_brownfield_adapt_end_to_end.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_brownfield_round_trip.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_brownfield_user_home_fixture.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_build_check_drift_gates.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_build_derivation_apm.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_build_derivation_claude_plugins.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_catalogue_init.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_cc_user_hooks_fixture.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_claude_plugins_install_route.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_config_cascade.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_credential_brokers_pack_install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_credentials_wheel.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_discovery_schema_cross_consumer.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_fixtures_validate.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_hook_wiring_ingress.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_adapt_chain.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_converters_user_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_copilot_full_parity.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_core_smoke.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_dependencies_gate.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_dual_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_orphan_reshape.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_pack_metadata_shape.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_profile.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_profile_live.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_repo_scope_per_adapter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_research_user_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_seed_delivery.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_session_start_wiring.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_upgrade_offer.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_user_hooks.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_install_user_scope_allowed_adapters.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_kiro_ide_hook_e2e.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_kiro_repo_hooks_fixture.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_kiro_user_hooks_fixture.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_list_packs_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_local_scope_install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_marketplace_entry_validation.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_marketplace_manifest_regression.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_multi_pack_install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_orphan_cleanup_respects_foreign_state.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_plugin_route_membership.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_recommends_cross_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_reconcile.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_reserved_path_filter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_scaffold_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_self_host_schema_migration.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_self_host_sweep_respects_state.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_shared_prefix_coexistence.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_tier_invariants.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_uninstall_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_uninstall_user_hooks.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_upgrade_attach_to_agent.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_upgrade_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_upgrade_user_hooks.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_version_gate_matrix.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_workspace_mcp_git_fsm.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/integration/test_zipapp.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/test_adapter_permissions_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/test_workspace_mcp_elicit.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/test_workspace_mcp_event_bridge.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/test_workspace_mcp_git.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/test_workspace_mcp_lifecycle.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/test_workspace_mcp_stdin.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/test_workspace_mcp_tools.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_adapt_discovery_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_append_layout_section.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_architect_readme_install_command.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_ci_contract.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_curation_deps.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_init_cli_self_hosted.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_pack_defaults.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_self_hosted_export_removal.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_skill_spec_lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_build.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_defaults.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_identity.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_init.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_self_hosted_init.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_tooling_source_package.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_catalogue_wave2_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_cli_catalogue_optional.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_cli_help_lists_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_cli_path_normalisation.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_cli_profile_surface.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_cli_scope_flags.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_codex_agent_toml.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_codex_projection_modes.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_common_classify_seeds.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_config_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_configured_adapter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_confirm_helper.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_contract_parity.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_contract_v0_3_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_copilot_agent_md.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_copilot_hooks_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_copilot_user_scope_wiring.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_credbroker_lint_hardening.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_dependencies_batch.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_diff_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_footprint_ownership.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_init_state_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_argparse_adapter_flag.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_argparse_emit_install_routes.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_defaults_preferred_adapter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_event_dropped_wirings.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_first_value_handoff.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_force_help.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_inband_detection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_messages.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_messages_repo_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_refusal_ordering.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_install_state_provenance.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_kiro_ide_hook_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_kiro_ide_hook_rail.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_kiro_ide_hook_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_lint_agent_artifacts_metadata_auth.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_list_installed_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_list_installed_status.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_list_targets_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_local_scope_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_local_scope_t10_uninstall.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_local_scope_t12_show.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_local_scope_t2_resolve.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_local_scope_t3_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_local_scope_t4_state_path.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_local_scope_t5_list_installed.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_local_scope_t7_install_gates.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_local_scope_t8_install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_local_scope_t9_exclude.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_marker_schema_version_parity.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_merge_into_agent_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_multi_adapter_disambiguator.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_nested_symlink_hardening.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_org_bootstrap.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_pack_config_api.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_pack_inventory.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_packstate_source_provenance.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_pipeline_phase_order.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_plugin_scope_filter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_profile_reader.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_render.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_render_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_render_table.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_resolve_state_path.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_resolve_target_adapter_user_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_resolve_user_scope_target_adapter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_safety.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_safety_repo_scope_prefixes.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_safety_scan_per_pack_scoping.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_scaffold_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_self_host_windows.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_shared_prefix_disclosure.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_source_conflict_guard.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_state_v01_refuse_write.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_state_v02.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_state_v0_4_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_statelock.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_target_resolver.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_toml_emitters.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_unresolved_markers.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_upgrade_bulk_all.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_upgrade_recap.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_upgrade_source_inference.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_user_config_io.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_user_config_isolation.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_user_config_path.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_user_config_source.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_user_merge_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_validate_attach_to_agent.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_validate_categories.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_validate_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_validate_hook_wiring_per_file_compatibility.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_values_from_shapes.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.0}/tests/unit/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentbundle
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.33.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-Expression: Apache-2.0 OR MIT
|
|
@@ -200,7 +200,12 @@ agentbundle catalogue package \
|
|
|
200
200
|
--output dist/
|
|
201
201
|
```
|
|
202
202
|
|
|
203
|
-
Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist
|
|
203
|
+
Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist
|
|
204
|
+
(`catalogue.toml`, packs, profiles, guides, a marketplace manifest when
|
|
205
|
+
present, and legal files), with the same build-residue exclusions as the
|
|
206
|
+
default flavour. Includes a `self-hosted-source-manifest.json` with per-file
|
|
207
|
+
SHA-256 digests and provenance fields. `agentbundle install` refuses to install
|
|
208
|
+
a source archive, preventing accidental misuse.
|
|
204
209
|
|
|
205
210
|
**Org bootstrap — ship the default channel in your fork:**
|
|
206
211
|
|
|
@@ -233,7 +238,10 @@ security boundary.
|
|
|
233
238
|
|
|
234
239
|
## Build your own catalogue
|
|
235
240
|
|
|
236
|
-
`agentbundle` isn't tied to the agent-ready-repo catalogue.
|
|
241
|
+
`agentbundle` isn't tied to the agent-ready-repo catalogue. A catalogue source
|
|
242
|
+
has two required root markers: a valid `catalogue.toml` and a literal `packs/`
|
|
243
|
+
directory. A custom `catalogue.paths.packs` value controls where pack content
|
|
244
|
+
is read from; it does not replace the root `packs/` marker.
|
|
237
245
|
|
|
238
246
|
**Bootstrap a new catalogue** in an empty directory:
|
|
239
247
|
|
|
@@ -334,6 +342,11 @@ The org hint fires after the user-config but before the on-disk IDE probe — so
|
|
|
334
342
|
agentbundle catalogue lint --root .
|
|
335
343
|
```
|
|
336
344
|
|
|
345
|
+
Lint validates both source markers and then checks the configured pack content.
|
|
346
|
+
It requires `.claude-plugin/marketplace.json` only when the effective self-host
|
|
347
|
+
adapters include `claude-code`. A Kiro-only catalogue can omit that Claude
|
|
348
|
+
artifact; the default Claude Code and Codex projection still requires it.
|
|
349
|
+
|
|
337
350
|
For full [agentskills.io spec](https://agentskills.io/specification) compliance (frontmatter key set, description policy, encoding, evals schema), install the `lint` extra and run with `--deep`:
|
|
338
351
|
|
|
339
352
|
```bash
|
|
@@ -180,7 +180,12 @@ agentbundle catalogue package \
|
|
|
180
180
|
--output dist/
|
|
181
181
|
```
|
|
182
182
|
|
|
183
|
-
Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist
|
|
183
|
+
Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist
|
|
184
|
+
(`catalogue.toml`, packs, profiles, guides, a marketplace manifest when
|
|
185
|
+
present, and legal files), with the same build-residue exclusions as the
|
|
186
|
+
default flavour. Includes a `self-hosted-source-manifest.json` with per-file
|
|
187
|
+
SHA-256 digests and provenance fields. `agentbundle install` refuses to install
|
|
188
|
+
a source archive, preventing accidental misuse.
|
|
184
189
|
|
|
185
190
|
**Org bootstrap — ship the default channel in your fork:**
|
|
186
191
|
|
|
@@ -213,7 +218,10 @@ security boundary.
|
|
|
213
218
|
|
|
214
219
|
## Build your own catalogue
|
|
215
220
|
|
|
216
|
-
`agentbundle` isn't tied to the agent-ready-repo catalogue.
|
|
221
|
+
`agentbundle` isn't tied to the agent-ready-repo catalogue. A catalogue source
|
|
222
|
+
has two required root markers: a valid `catalogue.toml` and a literal `packs/`
|
|
223
|
+
directory. A custom `catalogue.paths.packs` value controls where pack content
|
|
224
|
+
is read from; it does not replace the root `packs/` marker.
|
|
217
225
|
|
|
218
226
|
**Bootstrap a new catalogue** in an empty directory:
|
|
219
227
|
|
|
@@ -314,6 +322,11 @@ The org hint fires after the user-config but before the on-disk IDE probe — so
|
|
|
314
322
|
agentbundle catalogue lint --root .
|
|
315
323
|
```
|
|
316
324
|
|
|
325
|
+
Lint validates both source markers and then checks the configured pack content.
|
|
326
|
+
It requires `.claude-plugin/marketplace.json` only when the effective self-host
|
|
327
|
+
adapters include `claude-code`. A Kiro-only catalogue can omit that Claude
|
|
328
|
+
artifact; the default Claude Code and Codex projection still requires it.
|
|
329
|
+
|
|
317
330
|
For full [agentskills.io spec](https://agentskills.io/specification) compliance (frontmatter key set, description policy, encoding, evals schema), install the `lint` extra and run with `--deep`:
|
|
318
331
|
|
|
319
332
|
```bash
|
|
@@ -310,6 +310,11 @@ def _effective_adapters(preferred_adapter: str | None) -> tuple[str, ...]:
|
|
|
310
310
|
return SELF_HOST_ADAPTERS
|
|
311
311
|
|
|
312
312
|
|
|
313
|
+
def projects_claude_artifacts(preferred_adapter: str | None) -> bool:
|
|
314
|
+
"""Return whether self-host projection includes Claude project artifacts."""
|
|
315
|
+
return "claude-code" in _effective_adapters(preferred_adapter)
|
|
316
|
+
|
|
317
|
+
|
|
313
318
|
def _project_all_adapters(
|
|
314
319
|
output_root: Path,
|
|
315
320
|
packs_dir: Path,
|
|
@@ -1268,7 +1273,7 @@ def run_self_host(
|
|
|
1268
1273
|
# preferred-adapter is kiro-ide or kiro-cli (or any other adapter not in
|
|
1269
1274
|
# SELF_HOST_ADAPTERS), those artifacts are neither written nor expected in
|
|
1270
1275
|
# the drift check.
|
|
1271
|
-
|
|
1276
|
+
project_claude_artifacts = projects_claude_artifacts(preferred_adapter)
|
|
1272
1277
|
|
|
1273
1278
|
if dry_run:
|
|
1274
1279
|
with tempfile.TemporaryDirectory(prefix="agentbundle-shadow-") as shadow_str:
|
|
@@ -1286,11 +1291,11 @@ def run_self_host(
|
|
|
1286
1291
|
except ValueError as exc:
|
|
1287
1292
|
print(f"self-host: {exc}", file=sys.stderr)
|
|
1288
1293
|
return 4
|
|
1289
|
-
if
|
|
1294
|
+
if project_claude_artifacts:
|
|
1290
1295
|
_aggregate_marketplace(packs_dir, shadow, owner=owner, name=marketplace_name)
|
|
1291
1296
|
_recreate_claude_symlink(shadow, force_copy=no_symlink)
|
|
1292
1297
|
extra_marker_paths = list(seed_map.keys())
|
|
1293
|
-
if
|
|
1298
|
+
if project_claude_artifacts:
|
|
1294
1299
|
extra_marker_paths.append(Path(".claude-plugin") / "marketplace.json")
|
|
1295
1300
|
if agents_path is not None:
|
|
1296
1301
|
extra_marker_paths.append(Path("AGENTS.md"))
|
|
@@ -1347,11 +1352,11 @@ def run_self_host(
|
|
|
1347
1352
|
except ValueError as exc:
|
|
1348
1353
|
print(f"self-host: {exc}", file=sys.stderr)
|
|
1349
1354
|
return 4
|
|
1350
|
-
if
|
|
1355
|
+
if project_claude_artifacts:
|
|
1351
1356
|
_aggregate_marketplace(packs_dir, working_tree, owner=owner, name=marketplace_name)
|
|
1352
1357
|
_recreate_claude_symlink(working_tree, force_copy=no_symlink)
|
|
1353
1358
|
extra_marker_paths = list(seed_map.keys())
|
|
1354
|
-
if
|
|
1359
|
+
if project_claude_artifacts:
|
|
1355
1360
|
extra_marker_paths.append(Path(".claude-plugin") / "marketplace.json")
|
|
1356
1361
|
if agents_path is not None:
|
|
1357
1362
|
extra_marker_paths.append(Path("AGENTS.md"))
|
|
@@ -10,10 +10,11 @@ from __future__ import annotations
|
|
|
10
10
|
import hashlib
|
|
11
11
|
import json
|
|
12
12
|
import tarfile
|
|
13
|
-
import tempfile
|
|
14
13
|
from pathlib import Path
|
|
15
14
|
|
|
15
|
+
from agentbundle.catalogue import CatalogueError
|
|
16
16
|
from agentbundle.catalogue_tooling.results import Diagnostic, Severity, VerifyResult
|
|
17
|
+
from agentbundle.https_catalogue import _validated_archive_destination
|
|
17
18
|
|
|
18
19
|
_MANIFEST_NAME = "catalogue-manifest.json"
|
|
19
20
|
_SOURCE_MANIFEST_NAME = "self-hosted-source-manifest.json"
|
|
@@ -87,15 +88,19 @@ def check_members(members: list[tarfile.TarInfo]) -> list[Diagnostic]:
|
|
|
87
88
|
"""Member-level safety checks. Exported for unit tests (T1)."""
|
|
88
89
|
diags: list[Diagnostic] = []
|
|
89
90
|
|
|
90
|
-
# No absolute paths
|
|
91
|
+
# No absolute, traversal, or platform-ambiguous paths. Tar member names
|
|
92
|
+
# are POSIX paths; backslashes are rejected rather than reinterpreted on
|
|
93
|
+
# Windows during extraction.
|
|
91
94
|
for m in members:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
95
|
+
try:
|
|
96
|
+
_validated_archive_destination(Path("/"), m.name)
|
|
97
|
+
except CatalogueError as exc:
|
|
98
|
+
code = (
|
|
99
|
+
"CAT-V-ARC-004"
|
|
100
|
+
if m.name.startswith("/") or (len(m.name) > 1 and m.name[1] == ":")
|
|
101
|
+
else "CAT-V-ARC-005"
|
|
102
|
+
)
|
|
103
|
+
diags.append(_err(code, str(exc), path=m.name))
|
|
99
104
|
|
|
100
105
|
# No symlinks or hard links
|
|
101
106
|
for m in members:
|
|
@@ -262,7 +267,7 @@ def _check_no_undeclared_members(
|
|
|
262
267
|
|
|
263
268
|
|
|
264
269
|
def _check_catalogue_markers(members: list[tarfile.TarInfo]) -> list[Diagnostic]:
|
|
265
|
-
"""At least one
|
|
270
|
+
"""At least one installable-archive marker must be present at its root."""
|
|
266
271
|
prefix = _detect_prefix(members)
|
|
267
272
|
marker_tops = {"catalogue.toml", "AGENTS.md", ".agentbundle"}
|
|
268
273
|
found: set[str] = set()
|
|
@@ -280,6 +285,54 @@ def _check_catalogue_markers(members: list[tarfile.TarInfo]) -> list[Diagnostic]
|
|
|
280
285
|
return []
|
|
281
286
|
|
|
282
287
|
|
|
288
|
+
def _check_marketplace_entries(
|
|
289
|
+
tf: tarfile.TarFile,
|
|
290
|
+
members: list[tarfile.TarInfo],
|
|
291
|
+
) -> list[Diagnostic]:
|
|
292
|
+
"""Apply source-equivalent marketplace semantics without source identity."""
|
|
293
|
+
prefix = _detect_prefix(members)
|
|
294
|
+
member_name = f"{prefix}.claude-plugin/marketplace.json"
|
|
295
|
+
marketplace = next((m for m in members if m.name == member_name), None)
|
|
296
|
+
if marketplace is None:
|
|
297
|
+
return []
|
|
298
|
+
|
|
299
|
+
try:
|
|
300
|
+
fobj = tf.extractfile(marketplace)
|
|
301
|
+
if fobj is None:
|
|
302
|
+
raise ValueError("marketplace member is not a regular file")
|
|
303
|
+
payload = json.loads(fobj.read().decode("utf-8"))
|
|
304
|
+
|
|
305
|
+
from agentbundle.build.main import _read_bundled
|
|
306
|
+
from agentbundle.catalogue_tooling.verify import _validate_marketplace_entries
|
|
307
|
+
|
|
308
|
+
entry_schema = json.loads(_read_bundled("marketplace-entry.schema.json"))
|
|
309
|
+
except Exception as exc:
|
|
310
|
+
return [_err(
|
|
311
|
+
"CAT-V-ARC-017",
|
|
312
|
+
f"marketplace validation failed: {exc}",
|
|
313
|
+
path=".claude-plugin/marketplace.json",
|
|
314
|
+
)]
|
|
315
|
+
|
|
316
|
+
source_diags = _validate_marketplace_entries(
|
|
317
|
+
payload,
|
|
318
|
+
entry_schema,
|
|
319
|
+
".claude-plugin/marketplace.json",
|
|
320
|
+
)
|
|
321
|
+
return [
|
|
322
|
+
Diagnostic(
|
|
323
|
+
code="CAT-V-ARC-017",
|
|
324
|
+
severity=diagnostic.severity,
|
|
325
|
+
pack=diagnostic.pack,
|
|
326
|
+
path=diagnostic.path,
|
|
327
|
+
line=diagnostic.line,
|
|
328
|
+
col=diagnostic.col,
|
|
329
|
+
message=diagnostic.message,
|
|
330
|
+
remediation=diagnostic.remediation,
|
|
331
|
+
)
|
|
332
|
+
for diagnostic in source_diags
|
|
333
|
+
]
|
|
334
|
+
|
|
335
|
+
|
|
283
336
|
def _check_min_agentbundle_compat(manifest: dict) -> list[Diagnostic]:
|
|
284
337
|
min_ver = manifest.get("minimum_agentbundle_version")
|
|
285
338
|
if not min_ver or not isinstance(min_ver, str):
|
|
@@ -316,9 +369,9 @@ def _make_result(diags: list[Diagnostic], operation: str) -> VerifyResult:
|
|
|
316
369
|
def verify_archive(archive: Path, sha256_file: Path | None = None) -> VerifyResult:
|
|
317
370
|
"""Verify a catalogue archive (.tar.gz).
|
|
318
371
|
|
|
319
|
-
Runs the full safety + semantic pipeline. Stops after safety errors.
|
|
320
|
-
Sha256 sidecar mismatch causes immediate early return.
|
|
321
|
-
|
|
372
|
+
Runs the full safety + archive-semantic pipeline. Stops after safety errors.
|
|
373
|
+
Sha256 sidecar mismatch causes immediate early return. Installable archives
|
|
374
|
+
are not source catalogues, so they are not passed to ``verify_catalogue``.
|
|
322
375
|
"""
|
|
323
376
|
diags: list[Diagnostic] = []
|
|
324
377
|
|
|
@@ -368,34 +421,7 @@ def verify_archive(archive: Path, sha256_file: Path | None = None) -> VerifyResu
|
|
|
368
421
|
diags.extend(_check_all_manifest_digests(tf, members, manifest))
|
|
369
422
|
diags.extend(_check_no_undeclared_members(members, manifest))
|
|
370
423
|
diags.extend(_check_catalogue_markers(members))
|
|
424
|
+
diags.extend(_check_marketplace_entries(tf, members))
|
|
371
425
|
diags.extend(_check_min_agentbundle_compat(manifest))
|
|
372
426
|
|
|
373
|
-
# Local discoverability — extract to tmpdir and verify as catalogue
|
|
374
|
-
if not any(d.severity == Severity.ERROR for d in diags):
|
|
375
|
-
prefix = _detect_prefix(members)
|
|
376
|
-
with tempfile.TemporaryDirectory() as tmpdir_str:
|
|
377
|
-
tmpdir = Path(tmpdir_str)
|
|
378
|
-
try:
|
|
379
|
-
tf.extractall(tmpdir, filter="data")
|
|
380
|
-
except TypeError:
|
|
381
|
-
# Python < 3.12: extract member-by-member;
|
|
382
|
-
# paths pre-validated by check_members()
|
|
383
|
-
for _m in tf.getmembers():
|
|
384
|
-
_dest = tmpdir / _m.name
|
|
385
|
-
_dest.parent.mkdir(parents=True, exist_ok=True)
|
|
386
|
-
if _m.isreg():
|
|
387
|
-
_fobj = tf.extractfile(_m)
|
|
388
|
-
if _fobj is not None:
|
|
389
|
-
_dest.write_bytes(_fobj.read())
|
|
390
|
-
catalogue_root = tmpdir / prefix.rstrip("/") if prefix else tmpdir
|
|
391
|
-
from agentbundle.catalogue_tooling.verify import verify_catalogue
|
|
392
|
-
inner = verify_catalogue(catalogue_root)
|
|
393
|
-
if not inner.ok:
|
|
394
|
-
for d in inner.diagnostics:
|
|
395
|
-
diags.append(_err(
|
|
396
|
-
"CAT-V-ARC-015",
|
|
397
|
-
f"extracted archive not locally discoverable: {d.message}",
|
|
398
|
-
path=d.path,
|
|
399
|
-
))
|
|
400
|
-
|
|
401
427
|
return _make_result(diags, "archive")
|
|
@@ -240,10 +240,10 @@ def _validate_path(root: Path, p: str, field_name: str) -> None:
|
|
|
240
240
|
f"catalogue.toml: {field_name!r} path must not traverse outside root: {p!r}"
|
|
241
241
|
)
|
|
242
242
|
# Resolve and check inside root (catches symlinks)
|
|
243
|
-
resolved_root = root.resolve()
|
|
244
243
|
try:
|
|
244
|
+
resolved_root = root.resolve()
|
|
245
245
|
resolved_path = (root / p).resolve()
|
|
246
|
-
except OSError as exc:
|
|
246
|
+
except (OSError, RuntimeError) as exc:
|
|
247
247
|
raise CatalogueConfigError(
|
|
248
248
|
f"catalogue.toml: {field_name!r} path cannot be resolved: {p!r}"
|
|
249
249
|
) from exc
|
|
@@ -20,7 +20,12 @@ import re
|
|
|
20
20
|
import tomllib
|
|
21
21
|
from pathlib import Path
|
|
22
22
|
|
|
23
|
-
from agentbundle.
|
|
23
|
+
from agentbundle.build.self_host import projects_claude_artifacts
|
|
24
|
+
from agentbundle.catalogue_tooling.config import (
|
|
25
|
+
CatalogueConfig,
|
|
26
|
+
CatalogueConfigError,
|
|
27
|
+
load_catalogue_config,
|
|
28
|
+
)
|
|
24
29
|
from agentbundle.catalogue_tooling.diagnostics import DiagnosticCode
|
|
25
30
|
from agentbundle.catalogue_tooling.results import Diagnostic, LintResult, Severity
|
|
26
31
|
|
|
@@ -967,40 +972,74 @@ def _cs_is_canonical_shim(py: Path, shim_source_dir: Path) -> bool:
|
|
|
967
972
|
|
|
968
973
|
|
|
969
974
|
class _CatalogueRules:
|
|
970
|
-
def __init__(self, root: Path, config:
|
|
975
|
+
def __init__(self, root: Path, config: CatalogueConfig) -> None:
|
|
971
976
|
self._root = root
|
|
972
977
|
self._config = config
|
|
978
|
+
self._resolved_root: Path | None = None
|
|
979
|
+
self._resolved_config_paths: dict[str, Path] = {}
|
|
980
|
+
self._unsafe_config_paths: set[str] = set()
|
|
973
981
|
|
|
974
982
|
def collect(self, pack_filter: str | None) -> list[Diagnostic]:
|
|
975
983
|
diagnostics: list[Diagnostic] = []
|
|
984
|
+
diagnostics.extend(self._check_config_paths())
|
|
976
985
|
diagnostics.extend(self._check_markers())
|
|
977
986
|
diagnostics.extend(self._check_duplicate_identities())
|
|
978
|
-
diagnostics.extend(self._check_config_paths())
|
|
979
987
|
diagnostics.extend(self._check_profiles())
|
|
980
988
|
return diagnostics
|
|
981
989
|
|
|
982
|
-
def
|
|
983
|
-
if self.
|
|
984
|
-
return
|
|
985
|
-
|
|
990
|
+
def _configured_path(self, field: str, default: str) -> Path | None:
|
|
991
|
+
if field in self._unsafe_config_paths:
|
|
992
|
+
return None
|
|
993
|
+
if field in self._resolved_config_paths:
|
|
994
|
+
return self._resolved_config_paths[field]
|
|
995
|
+
return self._root / default
|
|
996
|
+
|
|
997
|
+
def _packs_dir(self) -> Path | None:
|
|
998
|
+
return self._configured_path("packs", "packs")
|
|
986
999
|
|
|
987
|
-
def _marketplace_path(self) -> Path:
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
1000
|
+
def _marketplace_path(self) -> Path | None:
|
|
1001
|
+
return self._configured_path(
|
|
1002
|
+
"marketplace", ".claude-plugin/marketplace.json"
|
|
1003
|
+
)
|
|
991
1004
|
|
|
992
1005
|
def _check_markers(self) -> list[Diagnostic]:
|
|
993
1006
|
diags: list[Diagnostic] = []
|
|
1007
|
+
root_packs = self._root / "packs"
|
|
1008
|
+
root_packs_valid = root_packs.is_dir()
|
|
1009
|
+
if root_packs_valid and self._resolved_root is not None:
|
|
1010
|
+
try:
|
|
1011
|
+
resolved_root_packs = root_packs.resolve(strict=True)
|
|
1012
|
+
root_packs_valid = resolved_root_packs.is_relative_to(self._resolved_root)
|
|
1013
|
+
except (OSError, RuntimeError):
|
|
1014
|
+
root_packs_valid = False
|
|
1015
|
+
if not root_packs_valid:
|
|
1016
|
+
diags.append(_diag(
|
|
1017
|
+
DiagnosticCode.CAT_L002,
|
|
1018
|
+
Severity.ERROR,
|
|
1019
|
+
f"literal root packs directory missing or unsafe: {root_packs}",
|
|
1020
|
+
remediation="Create a literal packs directory inside the catalogue root.",
|
|
1021
|
+
))
|
|
1022
|
+
|
|
994
1023
|
packs_dir = self._packs_dir()
|
|
995
|
-
|
|
1024
|
+
configured_packs = self._config.paths.packs
|
|
1025
|
+
if configured_packs != "packs" and packs_dir is not None and not packs_dir.is_dir():
|
|
996
1026
|
diags.append(_diag(
|
|
997
1027
|
DiagnosticCode.CAT_L002,
|
|
998
1028
|
Severity.ERROR,
|
|
999
|
-
f"packs directory missing: {packs_dir}",
|
|
1000
|
-
remediation=
|
|
1029
|
+
f"configured packs directory missing: {packs_dir}",
|
|
1030
|
+
remediation=(
|
|
1031
|
+
"Create the configured packs directory or update "
|
|
1032
|
+
"catalogue.toml paths.packs."
|
|
1033
|
+
),
|
|
1001
1034
|
))
|
|
1035
|
+
|
|
1002
1036
|
mp = self._marketplace_path()
|
|
1003
|
-
|
|
1037
|
+
preferred_adapter = self._config.distribution.agentbundle.preferred_adapter
|
|
1038
|
+
if (
|
|
1039
|
+
mp is not None
|
|
1040
|
+
and projects_claude_artifacts(preferred_adapter)
|
|
1041
|
+
and not mp.exists()
|
|
1042
|
+
):
|
|
1004
1043
|
diags.append(_diag(
|
|
1005
1044
|
DiagnosticCode.CAT_L002,
|
|
1006
1045
|
Severity.ERROR,
|
|
@@ -1011,7 +1050,7 @@ class _CatalogueRules:
|
|
|
1011
1050
|
|
|
1012
1051
|
def _check_duplicate_identities(self) -> list[Diagnostic]:
|
|
1013
1052
|
packs_dir = self._packs_dir()
|
|
1014
|
-
if not packs_dir.is_dir():
|
|
1053
|
+
if packs_dir is None or not packs_dir.is_dir():
|
|
1015
1054
|
return []
|
|
1016
1055
|
seen_names: dict[str, str] = {}
|
|
1017
1056
|
diags: list[Diagnostic] = []
|
|
@@ -1038,18 +1077,16 @@ class _CatalogueRules:
|
|
|
1038
1077
|
seen_names[pack_name] = entry.name
|
|
1039
1078
|
return diags
|
|
1040
1079
|
|
|
1041
|
-
def _profiles_dir(self) -> Path:
|
|
1042
|
-
|
|
1043
|
-
profiles_val = getattr(self._config.paths, "profiles", None) # type: ignore[attr-defined]
|
|
1044
|
-
if profiles_val:
|
|
1045
|
-
return self._root / profiles_val
|
|
1046
|
-
return self._root / "profiles"
|
|
1080
|
+
def _profiles_dir(self) -> Path | None:
|
|
1081
|
+
return self._configured_path("profiles", "profiles")
|
|
1047
1082
|
|
|
1048
1083
|
def _check_profiles(self) -> list[Diagnostic]:
|
|
1049
1084
|
profiles_dir = self._profiles_dir()
|
|
1050
|
-
if not profiles_dir.is_dir():
|
|
1085
|
+
if profiles_dir is None or not profiles_dir.is_dir():
|
|
1051
1086
|
return []
|
|
1052
1087
|
packs_dir = self._packs_dir()
|
|
1088
|
+
if packs_dir is None:
|
|
1089
|
+
return []
|
|
1053
1090
|
packs = _profile_load_packs(packs_dir)
|
|
1054
1091
|
diags: list[Diagnostic] = []
|
|
1055
1092
|
for toml_path in sorted(profiles_dir.glob("*.toml")):
|
|
@@ -1074,11 +1111,21 @@ class _CatalogueRules:
|
|
|
1074
1111
|
return diags
|
|
1075
1112
|
|
|
1076
1113
|
def _check_config_paths(self) -> list[Diagnostic]:
|
|
1077
|
-
if self._config is None:
|
|
1078
|
-
return []
|
|
1079
1114
|
diags: list[Diagnostic] = []
|
|
1080
|
-
|
|
1081
|
-
|
|
1115
|
+
try:
|
|
1116
|
+
root = self._root.resolve(strict=True)
|
|
1117
|
+
except (OSError, RuntimeError) as exc:
|
|
1118
|
+
self._unsafe_config_paths.update(
|
|
1119
|
+
{"packs", "profiles", "contracts", "marketplace", "build_output"}
|
|
1120
|
+
)
|
|
1121
|
+
return [_diag(
|
|
1122
|
+
DiagnosticCode.CAT_L021,
|
|
1123
|
+
Severity.ERROR,
|
|
1124
|
+
f"catalogue root cannot be resolved safely: {exc}",
|
|
1125
|
+
remediation="Use a readable catalogue root without circular symlinks.",
|
|
1126
|
+
)]
|
|
1127
|
+
self._resolved_root = root
|
|
1128
|
+
paths_obj = self._config.paths
|
|
1082
1129
|
for field in ("packs", "profiles", "contracts", "marketplace", "build_output"):
|
|
1083
1130
|
val = getattr(paths_obj, field, None)
|
|
1084
1131
|
if not val:
|
|
@@ -1086,14 +1133,23 @@ class _CatalogueRules:
|
|
|
1086
1133
|
try:
|
|
1087
1134
|
resolved = (self._root / val).resolve()
|
|
1088
1135
|
if not resolved.is_relative_to(root):
|
|
1136
|
+
self._unsafe_config_paths.add(field)
|
|
1089
1137
|
diags.append(_diag(
|
|
1090
1138
|
DiagnosticCode.CAT_L021,
|
|
1091
1139
|
Severity.ERROR,
|
|
1092
1140
|
f"catalogue.paths.{field} resolves outside catalogue root: {val!r}",
|
|
1093
1141
|
remediation="Use a relative path that stays within the catalogue root.",
|
|
1094
1142
|
))
|
|
1095
|
-
|
|
1096
|
-
|
|
1143
|
+
else:
|
|
1144
|
+
self._resolved_config_paths[field] = resolved
|
|
1145
|
+
except (OSError, RuntimeError) as exc:
|
|
1146
|
+
self._unsafe_config_paths.add(field)
|
|
1147
|
+
diags.append(_diag(
|
|
1148
|
+
DiagnosticCode.CAT_L021,
|
|
1149
|
+
Severity.ERROR,
|
|
1150
|
+
f"catalogue.paths.{field} cannot be resolved safely: {val!r}: {exc}",
|
|
1151
|
+
remediation="Use a relative path without circular or escaping symlinks.",
|
|
1152
|
+
))
|
|
1097
1153
|
return diags
|
|
1098
1154
|
|
|
1099
1155
|
|
|
@@ -1791,15 +1847,32 @@ def lint_catalogue(root: Path, pack: str | None = None, *, deep: bool = False) -
|
|
|
1791
1847
|
catalogue_schema_version=1,
|
|
1792
1848
|
)
|
|
1793
1849
|
|
|
1850
|
+
if config is None:
|
|
1851
|
+
diagnostics.append(_diag(
|
|
1852
|
+
DiagnosticCode.CAT_L002,
|
|
1853
|
+
Severity.ERROR,
|
|
1854
|
+
f"catalogue.toml missing: {root / 'catalogue.toml'}",
|
|
1855
|
+
remediation="Create a valid catalogue.toml at the catalogue root.",
|
|
1856
|
+
))
|
|
1857
|
+
return LintResult(
|
|
1858
|
+
ok=False,
|
|
1859
|
+
diagnostics=diagnostics,
|
|
1860
|
+
schema_version=1,
|
|
1861
|
+
command="catalogue lint",
|
|
1862
|
+
operation="lint",
|
|
1863
|
+
agentbundle_version=_get_agentbundle_version(),
|
|
1864
|
+
catalogue_schema_version=1,
|
|
1865
|
+
)
|
|
1866
|
+
|
|
1794
1867
|
# Step 2: catalogue-level rules
|
|
1795
1868
|
cat_rules = _CatalogueRules(root, config)
|
|
1796
1869
|
diagnostics.extend(cat_rules.collect(pack))
|
|
1797
1870
|
|
|
1798
1871
|
# Step 3: determine packs dir
|
|
1799
|
-
packs_dir =
|
|
1872
|
+
packs_dir = cat_rules._packs_dir()
|
|
1800
1873
|
|
|
1801
1874
|
# Step 4+5: per-pack rules
|
|
1802
|
-
if packs_dir.is_dir():
|
|
1875
|
+
if packs_dir is not None and packs_dir.is_dir():
|
|
1803
1876
|
for pack_dir in sorted(packs_dir.iterdir()):
|
|
1804
1877
|
if pack_dir.name.startswith("_"):
|
|
1805
1878
|
continue # reserved authoring asset
|
|
@@ -70,9 +70,7 @@ def _step_config_validation(
|
|
|
70
70
|
def _step_lint(
|
|
71
71
|
root: Path, config: object | None, pack: str | None, tmpdir: Path
|
|
72
72
|
) -> list[Diagnostic]:
|
|
73
|
-
"""Step 2: run catalogue lint
|
|
74
|
-
if config is None:
|
|
75
|
-
return []
|
|
73
|
+
"""Step 2: run catalogue lint, including its source-identity checks."""
|
|
76
74
|
from agentbundle.catalogue_tooling.lint import lint_catalogue
|
|
77
75
|
result = lint_catalogue(root, pack=pack)
|
|
78
76
|
diags: list[Diagnostic] = []
|
|
@@ -587,6 +585,67 @@ def _step_marketplace(
|
|
|
587
585
|
return []
|
|
588
586
|
|
|
589
587
|
|
|
588
|
+
def _validate_marketplace_entries(
|
|
589
|
+
payload: object,
|
|
590
|
+
entry_schema: dict,
|
|
591
|
+
label: str,
|
|
592
|
+
) -> list[Diagnostic]:
|
|
593
|
+
"""Validate marketplace entries shared by source and archive verification."""
|
|
594
|
+
from agentbundle.build.validate import validate as validate_manifest
|
|
595
|
+
|
|
596
|
+
if not isinstance(payload, dict):
|
|
597
|
+
return [_err(
|
|
598
|
+
"CAT-V-013",
|
|
599
|
+
f"{label} must contain a JSON object",
|
|
600
|
+
path=label,
|
|
601
|
+
)]
|
|
602
|
+
|
|
603
|
+
plugin_entries = payload.get("plugins", [])
|
|
604
|
+
if not isinstance(plugin_entries, list):
|
|
605
|
+
return [_err(
|
|
606
|
+
"CAT-V-013",
|
|
607
|
+
f"{label} 'plugins' must be a JSON array",
|
|
608
|
+
path=label,
|
|
609
|
+
)]
|
|
610
|
+
|
|
611
|
+
diags: list[Diagnostic] = []
|
|
612
|
+
for plugin_entry in plugin_entries:
|
|
613
|
+
if not isinstance(plugin_entry, dict):
|
|
614
|
+
diags.append(_err(
|
|
615
|
+
"CAT-V-013",
|
|
616
|
+
"marketplace plugin entry must be a JSON object",
|
|
617
|
+
path=label,
|
|
618
|
+
))
|
|
619
|
+
continue
|
|
620
|
+
name = plugin_entry.get("name", "unknown")
|
|
621
|
+
if "source" not in plugin_entry:
|
|
622
|
+
# WARN, not ERROR. `[pack.links].repository` is optional, the
|
|
623
|
+
# shipped scaffold pack omits it, and an external catalogue may
|
|
624
|
+
# legitimately hold packs it does not publish for marketplace
|
|
625
|
+
# install. Surface the consequence without failing the build.
|
|
626
|
+
diags.append(_warn(
|
|
627
|
+
"CAT-V-013",
|
|
628
|
+
f"marketplace entry '{name}' has no 'source' — set "
|
|
629
|
+
f"[pack.links].repository in that pack's pack.toml so the "
|
|
630
|
+
f"build can emit one, or adopters cannot install it",
|
|
631
|
+
path=label,
|
|
632
|
+
))
|
|
633
|
+
if "hooks" in plugin_entry:
|
|
634
|
+
diags.append(_err(
|
|
635
|
+
"CAT-V-013",
|
|
636
|
+
f"plugin '{name}' contains 'hooks' — "
|
|
637
|
+
"hooks must not appear in marketplace entries",
|
|
638
|
+
path=label,
|
|
639
|
+
))
|
|
640
|
+
for error in validate_manifest(plugin_entry, entry_schema):
|
|
641
|
+
diags.append(_err(
|
|
642
|
+
"CAT-V-013",
|
|
643
|
+
f"marketplace entry '{name}': {error}",
|
|
644
|
+
path=label,
|
|
645
|
+
))
|
|
646
|
+
return diags
|
|
647
|
+
|
|
648
|
+
|
|
590
649
|
def _step_plugin_manifests(
|
|
591
650
|
root: Path, config: object | None, pack: str | None, tmpdir: Path
|
|
592
651
|
) -> list[Diagnostic]:
|
|
@@ -644,34 +703,7 @@ def _step_plugin_manifests(
|
|
|
644
703
|
diags.append(_err("CAT-V-013", f"{label} parse error: {exc}",
|
|
645
704
|
path=label))
|
|
646
705
|
return
|
|
647
|
-
|
|
648
|
-
name = plugin_entry.get("name", "unknown")
|
|
649
|
-
if "source" not in plugin_entry:
|
|
650
|
-
# WARN, not ERROR. `[pack.links].repository` is optional, the
|
|
651
|
-
# shipped scaffold pack omits it, and an external catalogue may
|
|
652
|
-
# legitimately hold packs it does not publish for marketplace
|
|
653
|
-
# install. That is a choice, not a defect — so surface the
|
|
654
|
-
# consequence and name the cause, but do not fail the build.
|
|
655
|
-
diags.append(_warn(
|
|
656
|
-
"CAT-V-013",
|
|
657
|
-
f"marketplace entry '{name}' has no 'source' — set "
|
|
658
|
-
f"[pack.links].repository in that pack's pack.toml so the "
|
|
659
|
-
f"build can emit one, or adopters cannot install it",
|
|
660
|
-
path=label,
|
|
661
|
-
))
|
|
662
|
-
if "hooks" in plugin_entry:
|
|
663
|
-
diags.append(_err(
|
|
664
|
-
"CAT-V-013",
|
|
665
|
-
f"plugin '{name}' contains 'hooks' — "
|
|
666
|
-
"hooks must not appear in marketplace entries",
|
|
667
|
-
path=label,
|
|
668
|
-
))
|
|
669
|
-
for error in _validate_manifest(plugin_entry, entry_schema):
|
|
670
|
-
diags.append(_err(
|
|
671
|
-
"CAT-V-013",
|
|
672
|
-
f"marketplace entry '{name}': {error}",
|
|
673
|
-
path=label,
|
|
674
|
-
))
|
|
706
|
+
diags.extend(_validate_marketplace_entries(payload, entry_schema, label))
|
|
675
707
|
|
|
676
708
|
for manifest_path in sorted(dist_dir.rglob("*.claude-plugin/plugin.json")) \
|
|
677
709
|
if dist_dir.exists() else []:
|
|
@@ -991,9 +1023,20 @@ def verify_catalogue(
|
|
|
991
1023
|
Build output (step 10) goes to a temporary directory; the catalogue
|
|
992
1024
|
root has zero new or modified files after verify completes.
|
|
993
1025
|
"""
|
|
994
|
-
from agentbundle.catalogue_tooling.config import load_catalogue_config
|
|
1026
|
+
from agentbundle.catalogue_tooling.config import CatalogueConfigError, load_catalogue_config
|
|
995
1027
|
|
|
996
|
-
|
|
1028
|
+
try:
|
|
1029
|
+
config = load_catalogue_config(root)
|
|
1030
|
+
except CatalogueConfigError as exc:
|
|
1031
|
+
return VerifyResult(
|
|
1032
|
+
ok=False,
|
|
1033
|
+
diagnostics=[_err("CAT-V-001", str(exc), path="catalogue.toml")],
|
|
1034
|
+
schema_version=1,
|
|
1035
|
+
command="catalogue verify",
|
|
1036
|
+
operation="source-checkout",
|
|
1037
|
+
agentbundle_version=_get_agentbundle_version(),
|
|
1038
|
+
catalogue_schema_version=1,
|
|
1039
|
+
)
|
|
997
1040
|
catalogue_schema_version = getattr(config, "schema", 1) if config else 1
|
|
998
1041
|
|
|
999
1042
|
all_diags: list[Diagnostic] = []
|