agentbundle 0.32.0__tar.gz → 0.33.1__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.1}/PKG-INFO +23 -3
- {agentbundle-0.32.0 → agentbundle-0.33.1}/README-pypi.md +22 -2
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/self_host.py +11 -5
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/archive.py +67 -41
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/config.py +2 -2
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/lint.py +104 -31
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/verify.py +76 -33
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/https_catalogue.py +34 -11
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/source_defaults.py +22 -9
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/version.py +1 -1
- {agentbundle-0.32.0 → agentbundle-0.33.1/agentbundle.egg-info}/PKG-INFO +23 -3
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle.egg-info/SOURCES.txt +2 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/pyproject.toml +1 -1
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/README.md +5 -0
- agentbundle-0.33.1/tests/build_pipeline/fixtures/claude-code-2.1.226-hook-events.json +45 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_hook_wiring_rules.py +8 -13
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_self_host_check.py +35 -0
- agentbundle-0.33.1/tests/fixtures/blank_catalogue/catalogue.toml +35 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_editable_source_detection.py +10 -7
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_default_source.py +14 -2
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_show_cmd.py +17 -5
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_archive.py +44 -9
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_foundation.py +13 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_lint.py +163 -10
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_package.py +35 -16
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_self_host.py +25 -6
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_verify.py +35 -14
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_wave2_validation.py +17 -2
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_https_catalogue.py +39 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_package_catalogue.py +32 -6
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_source_defaults.py +33 -2
- {agentbundle-0.32.0 → agentbundle-0.33.1}/MANIFEST.in +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/__main__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/adapter.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/adapter.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/manifest.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/evals/eval_queries.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_gemini_admissibility.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_shared_library_boundaries.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/catalogue.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/guide.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/install-marker.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/marketplace-entry.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/pack.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/plugin-manifest.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/profile.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/skill-manifest.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/skill.schema.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/_data/target-vocab.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/__main__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/adapter_root_bins.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/adapters/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/adapters/claude_code.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/adapters/codex.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/adapters/copilot.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/adapters/cursor.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/adapters/gemini.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/adapters/kiro.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/adapters/kiro_cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/adapters/kiro_ide.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/contract.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/hook_wiring_rules.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/lint_packs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/main.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/phase_order.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projection_io.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/codex_agent_toml.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/copilot_agent_md.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/direct_directory.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/gemini_command_toml.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/hook_id.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/merge_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/plugin_hooks.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/projections/user_merge_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/recipes/marketplace.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/recipes/self-host.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/scope_rails.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/shared_libs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/target_resolver.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/user_libs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/build/validate.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/build.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/defaults.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/file_safety.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/identity.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/initialise.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/package.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/results.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/self_host.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/categories.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/_common.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/_drop_warning.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/adapt.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/catalogue_build.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/catalogue_init.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/catalogue_lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/catalogue_package.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/catalogue_self_host.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/catalogue_verify.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/diff.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/docs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/init_state.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/list_installed.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/list_packs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/list_profiles.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/list_targets.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/oplog_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/pack_config_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/pack_evals.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/package_catalogue.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/profile.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/reconcile.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/render.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/scaffold.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/show.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/uninstall.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/upgrade.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/commands/validate.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/local_exclude.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/oplog.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/pack_inventory.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/render.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/safety.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/scaffold.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/statelock.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/user_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle/workspace_mcp.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle.egg-info/dependency_links.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle.egg-info/entry_points.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle.egg-info/requires.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/agentbundle.egg-info/top_level.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/conftest.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/setup.cfg +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/templates/install-marker.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/_support.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/core/.apm/agents/bar.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/core/.apm/commands/qux.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/baz.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/qux.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/core/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/core/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/governance-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/governance-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/governance-extras/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/product-documentation/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/product-documentation/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/product-documentation/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/fixtures/recipes/bogus-target.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_adapter_claude_code.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_adapter_codex.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_adapter_copilot.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_adapter_cursor.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_adapter_gemini.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_adapter_kiro.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_adapter_kiro_alias.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_adapter_kiro_cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_adapter_kiro_ide.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_adapter_root_bins_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_build_ships_seeds.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_contract.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_contract_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_contract_v07.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_contract_v08.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_direct_directory_cleanup.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_end_to_end_build.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_lint_packs.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_load_pack_hook_wiring_safely.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_pack_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_pack_schema_allowed_adapters.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_pack_schema_install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_pipeline.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_plugin_hooks.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_plugin_manifest_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_projectable_subset.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_projections_merge_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_scope_rails.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_security.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_self_host_fixture_guard.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_self_host_recipe_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_shared_libs_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_shared_prefix_contract.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_user_libs_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_validate.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/build_pipeline/test_writers_emit_lf.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/conftest.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/adapt/.adapt-discovery.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/adapt/values.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/blank_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/blank_catalogue/packs/.gitkeep +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/blank_catalogue/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/blank_catalogue/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/blank_catalogue/packs/_example/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/blank_catalogue/packs/_example/evals/eval_queries.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/blank_catalogue/packs/_example/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/blank_catalogue/profiles/.gitkeep +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/blank_catalogue/profiles/_example/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/blank_catalogue/profiles/_example/profile.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield/values.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt/AGENTS.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt/AGENTS.upstream.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt/DESIGN.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt/EXPECTED_TREE.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt/docs/CHARTER.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt/docs/guides/how-to/index.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt/docs/howto/getting-started.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt-expected/AGENTS.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt-expected/docs/CHARTER.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/.adapt-discovery.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/state.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/argv-flag/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/argv-flag/scripts/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/argv-flag-derived/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/argv-flag-derived/scripts/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/argv-flag-normalised/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/argv-flag-normalised/scripts/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/conforming/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/conforming/scripts/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/dotfile-grep/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/dotfile-grep/scripts/leak.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/dotfile-with-optout/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/dotfile-with-optout/scripts/legit.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/mcp-server-headers/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/mcp-server-headers/scripts/cli.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/creds/skills/missing-dont-block/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/agents/helper.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/commands/cmd.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/hook-wiring/run.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/hooks/run.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/install/catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/install/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/kiro_ide_hook/ask_agent_basic.kiro.hook +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/kiro_ide_hook/run_command_with_placeholder.kiro.hook +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/lint_packs/clean/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/lint_packs/clean/seeds/README.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/list-installed/golden_120col.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/list-installed/golden_80col.txt +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/list_packs/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/list_packs/catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/.apm/skills/local-test/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/cc-user-hooks/.apm/hook-wiring/on-prompt.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/cc-user-hooks/.apm/hooks/on-prompt.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/cc-user-hooks/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/kiro-repo-hooks/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/kiro-user-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/kiro-user-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/kiro-user-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/kiro-user-hooks/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-missing-attach/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-pascal-events/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/scaffold/test-pack/seeds/AGENTS.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/scaffold/test-pack/seeds/_agents-footer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/scaffold/test-pack/seeds/docs/CHARTER.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/validate/bad_recipe_pack/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/validate/malformed_pack/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/validate/valid_pack/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/fixtures/validate/version_mismatch_pack/pack.toml +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_adapt_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_adapt_dual_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_adapt_preflight_detection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_adapt_schema_migration.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_apm_install_route.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_blank_catalogue.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_brownfield_adapt_end_to_end.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_brownfield_round_trip.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_brownfield_user_home_fixture.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_build_check_drift_gates.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_build_derivation_apm.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_build_derivation_claude_plugins.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_catalogue_init.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_cc_user_hooks_fixture.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_claude_plugins_install_route.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_config_cascade.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_credential_brokers_pack_install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_credentials_wheel.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_discovery_schema_cross_consumer.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_fixtures_validate.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_hook_wiring_ingress.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_adapt_chain.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_converters_user_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_copilot_full_parity.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_core_smoke.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_dependencies_gate.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_dual_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_orphan_reshape.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_pack_metadata_shape.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_profile.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_profile_live.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_repo_scope_per_adapter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_research_user_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_seed_delivery.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_session_start_wiring.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_upgrade_offer.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_user_hooks.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_install_user_scope_allowed_adapters.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_kiro_ide_hook_e2e.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_kiro_repo_hooks_fixture.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_kiro_user_hooks_fixture.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_list_packs_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_local_scope_install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_marketplace_entry_validation.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_marketplace_manifest_regression.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_multi_pack_install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_orphan_cleanup_respects_foreign_state.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_plugin_route_membership.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_recommends_cross_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_reconcile.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_reserved_path_filter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_scaffold_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_self_host_schema_migration.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_self_host_sweep_respects_state.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_shared_prefix_coexistence.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_tier_invariants.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_uninstall_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_uninstall_user_hooks.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_upgrade_attach_to_agent.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_upgrade_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_upgrade_user_hooks.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_version_gate_matrix.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_workspace_mcp_git_fsm.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/integration/test_zipapp.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/test_adapter_permissions_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/test_workspace_mcp_elicit.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/test_workspace_mcp_event_bridge.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/test_workspace_mcp_git.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/test_workspace_mcp_lifecycle.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/test_workspace_mcp_stdin.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/test_workspace_mcp_tools.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/__init__.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_adapt_discovery_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_append_layout_section.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_architect_readme_install_command.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_ci_contract.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_curation_deps.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_init_cli_self_hosted.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_pack_defaults.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_self_hosted_export_removal.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_skill_spec_lint.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_build.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_defaults.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_identity.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_init.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_self_hosted_init.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_tooling_source_package.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_catalogue_wave2_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_cli_catalogue_optional.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_cli_help_lists_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_cli_path_normalisation.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_cli_profile_surface.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_cli_scope_flags.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_codex_agent_toml.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_codex_projection_modes.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_common_classify_seeds.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_config_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_configured_adapter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_confirm_helper.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_contract_parity.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_contract_v0_3_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_copilot_agent_md.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_copilot_hooks_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_copilot_user_scope_wiring.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_credbroker_lint_hardening.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_dependencies_batch.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_diff_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_footprint_ownership.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_init_state_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_argparse_adapter_flag.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_argparse_emit_install_routes.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_defaults_preferred_adapter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_event_dropped_wirings.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_first_value_handoff.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_force_help.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_inband_detection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_messages.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_messages_repo_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_refusal_ordering.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_install_state_provenance.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_kiro_ide_hook_projection.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_kiro_ide_hook_rail.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_kiro_ide_hook_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_lint_agent_artifacts_metadata_auth.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_list_installed_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_list_installed_status.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_list_targets_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_local_scope_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_local_scope_t10_uninstall.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_local_scope_t12_show.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_local_scope_t2_resolve.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_local_scope_t3_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_local_scope_t4_state_path.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_local_scope_t5_list_installed.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_local_scope_t7_install_gates.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_local_scope_t8_install.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_local_scope_t9_exclude.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_marker_schema_version_parity.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_merge_into_agent_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_multi_adapter_disambiguator.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_nested_symlink_hardening.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_org_bootstrap.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_pack_config_api.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_pack_inventory.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_packstate_source_provenance.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_pipeline_phase_order.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_plugin_scope_filter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_profile_reader.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_render.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_render_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_render_table.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_resolve_state_path.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_resolve_target_adapter_user_config.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_resolve_user_scope_target_adapter.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_safety.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_safety_repo_scope_prefixes.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_safety_scan_per_pack_scoping.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_scaffold_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_scope.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_self_host_windows.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_shared_prefix_disclosure.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_source_conflict_guard.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_state_v01_refuse_write.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_state_v02.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_state_v0_4_schema.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_statelock.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_target_resolver.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_toml_emitters.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_unresolved_markers.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_upgrade_bulk_all.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_upgrade_recap.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_upgrade_source_inference.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_user_config_io.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_user_config_isolation.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_user_config_path.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_user_config_source.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_user_merge_json.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_validate_attach_to_agent.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_validate_categories.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_validate_cmd.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_validate_hook_wiring_per_file_compatibility.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/tests/unit/test_values_from_shapes.py +0 -0
- {agentbundle-0.32.0 → agentbundle-0.33.1}/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.1
|
|
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
|
|
@@ -34,6 +34,13 @@ python -m pip install agentbundle
|
|
|
34
34
|
|
|
35
35
|
Requires Python 3.11+. Runs on macOS, Linux, and Windows.
|
|
36
36
|
|
|
37
|
+
## What's new in 0.33.1
|
|
38
|
+
|
|
39
|
+
If you maintain a catalogue with repository-level tests, `agentbundle catalogue
|
|
40
|
+
verify --root .` now recognizes the top-level `tests/` tree as
|
|
41
|
+
repository-owned. Those paths no longer produce `[info] unclassified` notices;
|
|
42
|
+
genuinely unknown paths still do, and the notices remain informational.
|
|
43
|
+
|
|
37
44
|
**Install into a repo** — so everyone who clones it gets the pack. `core` is the flagship pack, the loop itself:
|
|
38
45
|
|
|
39
46
|
```bash
|
|
@@ -200,7 +207,12 @@ agentbundle catalogue package \
|
|
|
200
207
|
--output dist/
|
|
201
208
|
```
|
|
202
209
|
|
|
203
|
-
Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist
|
|
210
|
+
Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist
|
|
211
|
+
(`catalogue.toml`, packs, profiles, guides, a marketplace manifest when
|
|
212
|
+
present, and legal files), with the same build-residue exclusions as the
|
|
213
|
+
default flavour. Includes a `self-hosted-source-manifest.json` with per-file
|
|
214
|
+
SHA-256 digests and provenance fields. `agentbundle install` refuses to install
|
|
215
|
+
a source archive, preventing accidental misuse.
|
|
204
216
|
|
|
205
217
|
**Org bootstrap — ship the default channel in your fork:**
|
|
206
218
|
|
|
@@ -233,7 +245,10 @@ security boundary.
|
|
|
233
245
|
|
|
234
246
|
## Build your own catalogue
|
|
235
247
|
|
|
236
|
-
`agentbundle` isn't tied to the agent-ready-repo catalogue.
|
|
248
|
+
`agentbundle` isn't tied to the agent-ready-repo catalogue. A catalogue source
|
|
249
|
+
has two required root markers: a valid `catalogue.toml` and a literal `packs/`
|
|
250
|
+
directory. A custom `catalogue.paths.packs` value controls where pack content
|
|
251
|
+
is read from; it does not replace the root `packs/` marker.
|
|
237
252
|
|
|
238
253
|
**Bootstrap a new catalogue** in an empty directory:
|
|
239
254
|
|
|
@@ -334,6 +349,11 @@ The org hint fires after the user-config but before the on-disk IDE probe — so
|
|
|
334
349
|
agentbundle catalogue lint --root .
|
|
335
350
|
```
|
|
336
351
|
|
|
352
|
+
Lint validates both source markers and then checks the configured pack content.
|
|
353
|
+
It requires `.claude-plugin/marketplace.json` only when the effective self-host
|
|
354
|
+
adapters include `claude-code`. A Kiro-only catalogue can omit that Claude
|
|
355
|
+
artifact; the default Claude Code and Codex projection still requires it.
|
|
356
|
+
|
|
337
357
|
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
358
|
|
|
339
359
|
```bash
|
|
@@ -14,6 +14,13 @@ python -m pip install agentbundle
|
|
|
14
14
|
|
|
15
15
|
Requires Python 3.11+. Runs on macOS, Linux, and Windows.
|
|
16
16
|
|
|
17
|
+
## What's new in 0.33.1
|
|
18
|
+
|
|
19
|
+
If you maintain a catalogue with repository-level tests, `agentbundle catalogue
|
|
20
|
+
verify --root .` now recognizes the top-level `tests/` tree as
|
|
21
|
+
repository-owned. Those paths no longer produce `[info] unclassified` notices;
|
|
22
|
+
genuinely unknown paths still do, and the notices remain informational.
|
|
23
|
+
|
|
17
24
|
**Install into a repo** — so everyone who clones it gets the pack. `core` is the flagship pack, the loop itself:
|
|
18
25
|
|
|
19
26
|
```bash
|
|
@@ -180,7 +187,12 @@ agentbundle catalogue package \
|
|
|
180
187
|
--output dist/
|
|
181
188
|
```
|
|
182
189
|
|
|
183
|
-
Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist
|
|
190
|
+
Produces a `catalogue-source-<release>.tar.gz` from a positive allowlist
|
|
191
|
+
(`catalogue.toml`, packs, profiles, guides, a marketplace manifest when
|
|
192
|
+
present, and legal files), with the same build-residue exclusions as the
|
|
193
|
+
default flavour. Includes a `self-hosted-source-manifest.json` with per-file
|
|
194
|
+
SHA-256 digests and provenance fields. `agentbundle install` refuses to install
|
|
195
|
+
a source archive, preventing accidental misuse.
|
|
184
196
|
|
|
185
197
|
**Org bootstrap — ship the default channel in your fork:**
|
|
186
198
|
|
|
@@ -213,7 +225,10 @@ security boundary.
|
|
|
213
225
|
|
|
214
226
|
## Build your own catalogue
|
|
215
227
|
|
|
216
|
-
`agentbundle` isn't tied to the agent-ready-repo catalogue.
|
|
228
|
+
`agentbundle` isn't tied to the agent-ready-repo catalogue. A catalogue source
|
|
229
|
+
has two required root markers: a valid `catalogue.toml` and a literal `packs/`
|
|
230
|
+
directory. A custom `catalogue.paths.packs` value controls where pack content
|
|
231
|
+
is read from; it does not replace the root `packs/` marker.
|
|
217
232
|
|
|
218
233
|
**Bootstrap a new catalogue** in an empty directory:
|
|
219
234
|
|
|
@@ -314,6 +329,11 @@ The org hint fires after the user-config but before the on-disk IDE probe — so
|
|
|
314
329
|
agentbundle catalogue lint --root .
|
|
315
330
|
```
|
|
316
331
|
|
|
332
|
+
Lint validates both source markers and then checks the configured pack content.
|
|
333
|
+
It requires `.claude-plugin/marketplace.json` only when the effective self-host
|
|
334
|
+
adapters include `claude-code`. A Kiro-only catalogue can omit that Claude
|
|
335
|
+
artifact; the default Claude Code and Codex projection still requires it.
|
|
336
|
+
|
|
317
337
|
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
338
|
|
|
319
339
|
```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,
|
|
@@ -415,6 +420,7 @@ EXCLUDED_PATTERNS: tuple[str, ...] = (
|
|
|
415
420
|
"guides/**/*.md",
|
|
416
421
|
"web/**",
|
|
417
422
|
"profiles/**",
|
|
423
|
+
"tests/**",
|
|
418
424
|
# Seeded-once / adopter-curated files (Manual semantics).
|
|
419
425
|
"workspace.toml", # Seeded once; adopter-curated thereafter
|
|
420
426
|
# Manual seed-projected root path (amendment 2026-05-25). The subtree
|
|
@@ -1268,7 +1274,7 @@ def run_self_host(
|
|
|
1268
1274
|
# preferred-adapter is kiro-ide or kiro-cli (or any other adapter not in
|
|
1269
1275
|
# SELF_HOST_ADAPTERS), those artifacts are neither written nor expected in
|
|
1270
1276
|
# the drift check.
|
|
1271
|
-
|
|
1277
|
+
project_claude_artifacts = projects_claude_artifacts(preferred_adapter)
|
|
1272
1278
|
|
|
1273
1279
|
if dry_run:
|
|
1274
1280
|
with tempfile.TemporaryDirectory(prefix="agentbundle-shadow-") as shadow_str:
|
|
@@ -1286,11 +1292,11 @@ def run_self_host(
|
|
|
1286
1292
|
except ValueError as exc:
|
|
1287
1293
|
print(f"self-host: {exc}", file=sys.stderr)
|
|
1288
1294
|
return 4
|
|
1289
|
-
if
|
|
1295
|
+
if project_claude_artifacts:
|
|
1290
1296
|
_aggregate_marketplace(packs_dir, shadow, owner=owner, name=marketplace_name)
|
|
1291
1297
|
_recreate_claude_symlink(shadow, force_copy=no_symlink)
|
|
1292
1298
|
extra_marker_paths = list(seed_map.keys())
|
|
1293
|
-
if
|
|
1299
|
+
if project_claude_artifacts:
|
|
1294
1300
|
extra_marker_paths.append(Path(".claude-plugin") / "marketplace.json")
|
|
1295
1301
|
if agents_path is not None:
|
|
1296
1302
|
extra_marker_paths.append(Path("AGENTS.md"))
|
|
@@ -1347,11 +1353,11 @@ def run_self_host(
|
|
|
1347
1353
|
except ValueError as exc:
|
|
1348
1354
|
print(f"self-host: {exc}", file=sys.stderr)
|
|
1349
1355
|
return 4
|
|
1350
|
-
if
|
|
1356
|
+
if project_claude_artifacts:
|
|
1351
1357
|
_aggregate_marketplace(packs_dir, working_tree, owner=owner, name=marketplace_name)
|
|
1352
1358
|
_recreate_claude_symlink(working_tree, force_copy=no_symlink)
|
|
1353
1359
|
extra_marker_paths = list(seed_map.keys())
|
|
1354
|
-
if
|
|
1360
|
+
if project_claude_artifacts:
|
|
1355
1361
|
extra_marker_paths.append(Path(".claude-plugin") / "marketplace.json")
|
|
1356
1362
|
if agents_path is not None:
|
|
1357
1363
|
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
|