agentbundle 0.52.0__tar.gz → 0.53.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.52.0/agentbundle.egg-info → agentbundle-0.53.0}/PKG-INFO +16 -1
- {agentbundle-0.52.0 → agentbundle-0.53.0}/README-pypi.md +15 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +8 -8
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +85 -7
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/manifest.json +2 -2
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/guide.schema.json +30 -5
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/workspace_status_engine.py +3 -3
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/archive.py +159 -2
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/package.py +239 -27
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/results.py +7 -1
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/cli.py +22 -1
- agentbundle-0.53.0/agentbundle/commands/catalogue_package.py +196 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/version.py +1 -1
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/workspace_mcp.py +1 -1
- {agentbundle-0.52.0 → agentbundle-0.53.0/agentbundle.egg-info}/PKG-INFO +16 -1
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle.egg-info/SOURCES.txt +4 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/pyproject.toml +1 -1
- agentbundle-0.53.0/tests/unit/test_catalogue_archive_unit_digests.py +194 -0
- agentbundle-0.53.0/tests/unit/test_catalogue_package_compare.py +523 -0
- agentbundle-0.53.0/tests/unit/test_catalogue_package_refusal.py +331 -0
- agentbundle-0.53.0/tests/unit/test_catalogue_unit_digests.py +178 -0
- agentbundle-0.52.0/agentbundle/commands/catalogue_package.py +0 -98
- {agentbundle-0.52.0 → agentbundle-0.53.0}/MANIFEST.in +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/README.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/__main__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/adapter.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/adapter.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/agent-plugin-extension-namespaces.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/agent-plugin-extension-namespaces.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-index.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/packs/CLAUDE.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/evals/eval_queries.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/profiles/CLAUDE.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_gemini_admissibility.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_layout_declared_section.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_shared_library_boundaries.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/close_work.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/cooling.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/distribution-routes.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/distribution-routes.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/file_safety.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/install-marker.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/knowledge-captured-observation.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/marketplace-entry.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/pack.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/plugin-manifest.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/profile.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/public-contracts.txt +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/skill-manifest.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/skill.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/target-vocab.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/vendor/agent-plugins/1.0.0/LICENSE.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/vendor/agent-plugins/1.0.0/PROVENANCE.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/vendor/agent-plugins/1.0.0/mcp.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/vendor/agent-plugins/1.0.0/plugin.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/work_intake_refresh.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/workspace_status_prune.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/bounded_metadata.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/__main__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapter_root_bins.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapters/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapters/_sweep_guard.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapters/claude_code.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapters/codex.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapters/copilot.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapters/cursor.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapters/gemini.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapters/kiro.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapters/kiro_cli.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/adapters/kiro_ide.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/contract.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/hook_wiring_rules.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/lint_packs.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/main.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/phase_order.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projection_io.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/codex_agent_toml.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/copilot_agent_md.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/direct_directory.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/gemini_command_toml.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/hook_id.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/merge_json.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/plugin_hooks.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/projections/user_merge_json.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/recipes/marketplace.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/recipes/per-pack-agent-plugin.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/recipes/self-host.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/route_agent_plugin.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/route_apm.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/route_claude_plugins.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/route_lookup.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/scope_rails.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/self_host.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/shared_libs.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/target_resolver.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/user_libs.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/build/validate.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_fetch/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_fetch/direct_http.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_fetch/jfrog_cli.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_fetch/models.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/build.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/config.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/contracts_inspector.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/defaults.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/file_safety.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/identity.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/index_generator.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/initialise.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/journey_validator.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/lint.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/manifest.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/okf_discovery.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/self_host.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/verify.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/catalogue_tooling/version_ranges.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/categories.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/_common.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/_drop_warning.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/adapt.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/catalogue_build.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/catalogue_contracts.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/catalogue_index.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/catalogue_init.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/catalogue_lint.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/catalogue_self_host.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/catalogue_sync.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/catalogue_verify.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/config.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/diff.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/docs.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/init_state.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/install.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/list_installed.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/list_packs.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/list_profiles.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/list_targets.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/oplog_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/pack_config_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/pack_evals.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/package_catalogue.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/profile.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/reconcile.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/render.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/scaffold.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/show.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/uninstall.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/upgrade.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/commands/validate.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/config.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/direct_install.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/direct_source.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/direct_source_acquisition.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/direct_source_state.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/direct_validate.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/https_catalogue.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/local_exclude.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/oplog.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/pack_inventory.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/render.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/safety.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/scaffold.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/scope.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/source_defaults.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/statelock.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/system_trust.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/user_config.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle.egg-info/dependency_links.txt +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle.egg-info/entry_points.txt +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle.egg-info/requires.txt +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle.egg-info/top_level.txt +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/conftest.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/setup.cfg +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/templates/install-marker.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/_direct_acquisition.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/_support.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/README.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/claude-code-2.1.226-hook-events.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/claude-code-2.1.228-hook-events.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/core/.apm/agents/bar.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/core/.apm/commands/qux.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/baz.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/qux.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/core/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/core/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/governance-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/governance-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/governance-extras/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/monorepo-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/monorepo-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/monorepo-extras/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/product-documentation/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/product-documentation/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/product-documentation/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/fixtures/recipes/bogus-target.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_adapter_claude_code.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_adapter_codex.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_adapter_copilot.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_adapter_cursor.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_adapter_gemini.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_adapter_kiro.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_adapter_kiro_alias.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_adapter_kiro_cli.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_adapter_kiro_ide.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_adapter_root_bins_projection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_agent_boundary_metadata_projection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_agent_plugin_projection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_build_ships_seeds.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_contract.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_contract_scope.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_contract_v07.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_contract_v08.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_direct_directory_cleanup.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_distribution_route_contract.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_distribution_route_golden.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_distribution_route_resolution.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_end_to_end_build.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_hook_wiring_rules.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_lint_packs.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_load_pack_hook_wiring_safely.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_pack_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_pack_schema_allowed_adapters.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_pack_schema_install.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_pipeline.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_plugin_hooks.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_plugin_manifest_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_plugin_publication_gates.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_policy_registry_projection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_projectable_subset.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_projection_io.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_projections_merge_json.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_route_lookup.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_scope_rails.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_security.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_self_host_check.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_self_host_fixture_guard.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_self_host_metadata_policy.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_self_host_recipe_config.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_sequential_implementer_dispatch_projection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_shared_libs_projection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_shared_prefix_contract.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_user_libs_projection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_validate.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/build_pipeline/test_writers_emit_lf.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/conftest.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/contracts/test_agentbundle_show_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/contracts/test_catalogue_fetch_credential_boundary.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/contracts/test_skill_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/adapt/.adapt-discovery.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/adapt/values.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/catalogue.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/packs/.gitkeep +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/packs/_example/README.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/packs/_example/evals/eval_queries.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/packs/_example/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/profiles/.gitkeep +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/profiles/_example/README.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/blank_catalogue/profiles/_example/profile.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield/values.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt/AGENTS.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt/AGENTS.upstream.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt/DESIGN.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt/EXPECTED_TREE.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt/docs/CHARTER.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt/docs/guides/how-to/index.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt/docs/howto/getting-started.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt-expected/AGENTS.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt-expected/docs/CHARTER.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/.adapt-discovery.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/state.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/catalogue_sync/adapter_contract_major_mismatch/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/catalogue_wave4/catalogue.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/hook-wiring/example.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/skills/example-skill/scripts/run.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/JOURNEY.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/catalogue_wave4/packs/pack-without-journey/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/catalogue_wave4/profiles/test-profile.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/cognitive-load-hosts.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/argv-flag/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/argv-flag/scripts/cli.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/argv-flag-derived/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/argv-flag-derived/scripts/cli.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/argv-flag-normalised/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/argv-flag-normalised/scripts/cli.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/conforming/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/conforming/scripts/cli.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/dotfile-grep/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/dotfile-grep/scripts/leak.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/dotfile-with-optout/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/dotfile-with-optout/scripts/legit.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/mcp-server-headers/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/mcp-server-headers/scripts/cli.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/creds/skills/missing-dont-block/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/direct/ac35_corpus_verdicts.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/direct/golden_state_0_5.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/distribution-routes/golden.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/distribution-routes/witness-packs/portable/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/distribution-routes/witness-packs/portable/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/AGENTS.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/LICENSE-APACHE +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/LICENSE-MIT +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/catalogue.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/packs/alpha/seeds/AGENTS.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/packs/beta/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/external_catalogue/profiles/example.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/install/catalogue/packs/alpha/.apm/agents/helper.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/install/catalogue/packs/alpha/.apm/commands/cmd.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/install/catalogue/packs/alpha/.apm/hook-wiring/run.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/install/catalogue/packs/alpha/.apm/hooks/run.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/install/catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/install/catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/install/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/kiro_ide_hook/ask_agent_basic.kiro.hook +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/kiro_ide_hook/run_command_with_placeholder.kiro.hook +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/lint_packs/clean/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/lint_packs/clean/seeds/README.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/list-installed/golden_120col.txt +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/list-installed/golden_80col.txt +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/list_packs/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/list_packs/catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/.apm/skills/local-test/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/cc-user-hooks/.apm/hook-wiring/on-prompt.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/cc-user-hooks/.apm/hooks/on-prompt.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/cc-user-hooks/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/kiro-repo-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/kiro-repo-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/kiro-repo-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/kiro-repo-hooks/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/kiro-user-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/kiro-user-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/kiro-user-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/kiro-user-hooks/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-missing-attach/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-pascal-events/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/packs/malformed-kiro-unknown-agent/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/scaffold/test-pack/seeds/AGENTS.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/scaffold/test-pack/seeds/_agents-footer.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/scaffold/test-pack/seeds/docs/CHARTER.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/show_contract/agentbundle-show.schema.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/show_contract/catalogue.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/show_contract/installed_state.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v1/packs/core/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v2/packs/core/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/upgrade/catalogue_v3/packs/core/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/validate/bad_recipe_pack/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/validate/malformed_pack/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/validate/valid_pack/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/fixtures/validate/version_mismatch_pack/pack.toml +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_adapt_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_adapt_dual_scope.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_adapt_preflight_detection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_adapt_schema_migration.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_apm_install_route.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_blank_catalogue.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_brownfield_adapt_end_to_end.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_brownfield_round_trip.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_brownfield_user_home_fixture.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_build_check_drift_gates.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_build_derivation_apm.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_build_derivation_claude_plugins.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_init.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_verify_adapter_compat.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_verify_dependencies.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_verify_external_portability.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_verify_fixture_checks.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_verify_marketplace.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_verify_output_drift.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_verify_package_preflight.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_verify_plugin_path.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_verify_profile_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_verify_step1.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_wave4_index_generator.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_wave4_integration.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_wave4_journey_validator.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_catalogue_wave4_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_cc_user_hooks_fixture.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_claude_plugins_install_route.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_config_cascade.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_credential_brokers_pack_install.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_credentials_wheel.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_direct_install.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_discovery_schema_cross_consumer.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_editable_source_detection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_fixtures_validate.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_hook_wiring_ingress.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_adapt_chain.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_converters_user_scope.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_copilot_full_parity.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_core_smoke.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_default_source.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_dependencies_gate.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_dual_scope.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_layout_is_best_effort.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_orphan_reshape.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_pack_metadata_shape.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_profile.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_profile_live.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_repo_scope_per_adapter.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_research_user_scope.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_seed_delivery.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_session_start_wiring.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_upgrade_offer.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_user_hooks.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_install_user_scope_allowed_adapters.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_jfrog_cli_contract.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_kiro_ide_hook_e2e.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_kiro_repo_hooks_fixture.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_kiro_user_hooks_fixture.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_list_packs_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_local_scope_install.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_marketplace_entry_validation.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_marketplace_manifest_regression.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_multi_pack_install.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_orphan_cleanup_respects_foreign_state.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_plugin_route_membership.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_portable_catalogue_authentication.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_recommends_cross_scope.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_reconcile.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_reserved_path_filter.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_scaffold_projection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_self_host_schema_migration.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_self_host_sweep_respects_state.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_shared_prefix_coexistence.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_show_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_tier_invariants.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_trust_fallback_tls.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_uninstall_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_uninstall_user_hooks.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_upgrade_attach_to_agent.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_upgrade_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_upgrade_user_hooks.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_version_gate_matrix.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_workspace_mcp_git_fsm.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/integration/test_zipapp.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/performance/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/performance/test_direct_family2_budget_cost.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/test_adapter_permissions_projection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/test_workspace_mcp_elicit.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/test_workspace_mcp_event_bridge.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/test_workspace_mcp_git.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/test_workspace_mcp_git_scope.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/test_workspace_mcp_layout_override.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/test_workspace_mcp_lifecycle.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/test_workspace_mcp_stdin.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/test_workspace_mcp_tools.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/__init__.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/conftest.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_adapt_discovery_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_adapter_symlink_policy.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_append_layout_section.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_architect_readme_install_command.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_ci_contract.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_curation_deps.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_fetch.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_fetch_jfrog.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_init_cli_self_hosted.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_pack_defaults.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_self_hosted_export_removal.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_skill_spec_lint.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_sync.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_sync_fixture_set.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_archive.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_build.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_defaults.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_file_safety.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_foundation.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_identity.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_init.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_lint.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_package.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_self_host.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_self_hosted_init.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_source_package.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_tooling_verify.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_trust_fallback.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_wave2_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_wave2_validation.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_wave3_contracts_cli.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_wave3_contracts_inspector.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_wave3_init_nextsteps.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_catalogue_wave3_offline_navigation.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_cli_catalogue_optional.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_cli_help_lists_config.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_cli_list_targets_help.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_cli_namespace_fixture.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_cli_path_normalisation.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_cli_profile_surface.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_cli_scope_flags.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_codex_agent_toml.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_codex_projection_modes.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_cognitive_load_seed_contract.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_collect_tree_symlinks.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_common_classify_seeds.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_config.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_config_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_configured_adapter.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_confirm_helper.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_contract_parity.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_contract_v0_3_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_copilot_agent_md.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_copilot_hooks_json.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_copilot_user_scope_wiring.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_credbroker_lint_hardening.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_dependencies_batch.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_diff_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_direct_admission.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_direct_architecture_controls.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_direct_diagnostics.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_direct_lifecycle_facts.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_direct_source_acquisition.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_direct_source_state.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_direct_upgrade.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_direct_validate.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_footprint_ownership.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_https_catalogue.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_init_state_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_argparse_adapter_flag.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_argparse_emit_install_routes.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_defaults_preferred_adapter.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_event_dropped_wirings.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_first_value_handoff.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_force_help.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_inband_detection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_messages.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_messages_repo_scope.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_refusal_ordering.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_install_state_provenance.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_kiro_ide_hook_projection.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_kiro_ide_hook_rail.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_kiro_ide_hook_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_layout_bases_anchoring.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_lint_agent_artifacts_metadata_auth.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_list_installed_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_list_installed_status.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_list_targets_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_exclude_git_cache.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_scope_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_scope_t10_uninstall.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_scope_t12_show.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_scope_t2_resolve.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_scope_t3_config.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_scope_t4_state_path.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_scope_t5_list_installed.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_scope_t7_install_gates.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_scope_t8_install.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_local_scope_t9_exclude.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_marker_schema_version_parity.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_merge_into_agent_json.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_multi_adapter_disambiguator.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_nested_symlink_hardening.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_offer_upgrade_namespace.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_okf_discovery.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_org_bootstrap.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_orphan_sweep_guards.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_pack_config_api.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_pack_inventory.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_pack_layout_section_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_package_catalogue.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_packstate_source_provenance.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_pipeline_phase_order.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_plugin_scope_filter.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_profile_reader.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_render.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_render_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_render_table.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_resolve_state_path.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_resolve_target_adapter_user_config.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_resolve_user_scope_target_adapter.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_route_surface_parity.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_safety.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_safety_repo_scope_prefixes.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_safety_scan_per_pack_scoping.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_scaffold_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_scope.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_self_host_windows.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_shared_prefix_disclosure.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_source_conflict_guard.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_source_defaults.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_state_v01_refuse_write.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_state_v02.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_state_v0_4_schema.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_statelock.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_statelock_hardening.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_system_trust.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_target_resolver.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_toml_emitters.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_unresolved_markers.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_upgrade_bulk_all.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_upgrade_recap.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_upgrade_source_inference.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_user_config_io.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_user_config_isolation.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_user_config_path.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_user_config_source.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_user_merge_json.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_validate_attach_to_agent.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_validate_categories.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_validate_cmd.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_validate_hook_wiring_per_file_compatibility.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_values_from_shapes.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_version.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_windows_direct_suite_registration.py +0 -0
- {agentbundle-0.52.0 → agentbundle-0.53.0}/tests/unit/test_workspace_mcp_events_poller.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentbundle
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.53.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
|
|
@@ -35,6 +35,21 @@ python -m pip install agentbundle
|
|
|
35
35
|
|
|
36
36
|
Requires Python 3.11+. Runs on macOS, Linux, and Windows.
|
|
37
37
|
|
|
38
|
+
## What's new in 0.53.0
|
|
39
|
+
|
|
40
|
+
`agentbundle catalogue package` now refuses to replace a release archive that
|
|
41
|
+
already exists and exits 2; `--force` replaces it on purpose. `--compare
|
|
42
|
+
<archive>` lists the packs and profiles added, removed or changed since a prior
|
|
43
|
+
release, and `--format json` writes that result on stdout. Shortened options
|
|
44
|
+
such as `--forc` are rejected, and each `profiles` entry in the manifest is now
|
|
45
|
+
an object with a `path` and a `digest`.
|
|
46
|
+
|
|
47
|
+
## What's new in 0.52.1
|
|
48
|
+
|
|
49
|
+
The workspace-status engine and MCP tool now route `shape` entries to
|
|
50
|
+
`intent`. The shaping suggestion and the `shape` dispatch need
|
|
51
|
+
`product-engineering` 1.0.0 or later.
|
|
52
|
+
|
|
38
53
|
## What's new in 0.52.0
|
|
39
54
|
|
|
40
55
|
The workspace-status MCP tool now surfaces a former legacy entry (a bare
|
|
@@ -14,6 +14,21 @@ 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.53.0
|
|
18
|
+
|
|
19
|
+
`agentbundle catalogue package` now refuses to replace a release archive that
|
|
20
|
+
already exists and exits 2; `--force` replaces it on purpose. `--compare
|
|
21
|
+
<archive>` lists the packs and profiles added, removed or changed since a prior
|
|
22
|
+
release, and `--format json` writes that result on stdout. Shortened options
|
|
23
|
+
such as `--forc` are rejected, and each `profiles` entry in the manifest is now
|
|
24
|
+
an object with a `path` and a `digest`.
|
|
25
|
+
|
|
26
|
+
## What's new in 0.52.1
|
|
27
|
+
|
|
28
|
+
The workspace-status engine and MCP tool now route `shape` entries to
|
|
29
|
+
`intent`. The shaping suggestion and the `shape` dispatch need
|
|
30
|
+
`product-engineering` 1.0.0 or later.
|
|
31
|
+
|
|
17
32
|
## What's new in 0.52.0
|
|
18
33
|
|
|
19
34
|
The workspace-status MCP tool now surfaces a former legacy entry (a bare
|
|
@@ -69,7 +69,7 @@ and `version`; `[pack.adapter-contract]` with `version`.
|
|
|
69
69
|
marketplace browser, a catalogue listing, or CLI output. It is not read by the model.
|
|
70
70
|
|
|
71
71
|
That makes it a different artifact from a skill's or agent's `description`, which the
|
|
72
|
-
model reads to decide whether to **activate** the primitive. Length
|
|
72
|
+
model reads to decide whether to **activate** the primitive. Length matters
|
|
73
73
|
there and shortening it degrades activation; per-target caps in
|
|
74
74
|
`contracts/target-vocab.toml` govern it. Do not carry habits from one to the other.
|
|
75
75
|
|
|
@@ -126,7 +126,7 @@ review against the shape and the table above.
|
|
|
126
126
|
A pack README serves adopters, not contributors. It states the pack's intent and the
|
|
127
127
|
user journey it serves — not a skill inventory. See the `_example` pack for a template.
|
|
128
128
|
|
|
129
|
-
- [packs/_example/README.md](../../../packs/_example/README.md) —
|
|
129
|
+
- [packs/_example/README.md](../../../packs/_example/README.md) — the model example.
|
|
130
130
|
|
|
131
131
|
---
|
|
132
132
|
|
|
@@ -224,7 +224,7 @@ archive supports downstream verification, auditing, security review, and
|
|
|
224
224
|
testing an extracted release.
|
|
225
225
|
|
|
226
226
|
Catalogue inclusion does not imply runtime installation. Installers and
|
|
227
|
-
projection adapters treat `.apm/` and `seeds/` as the projected
|
|
227
|
+
projection adapters treat `.apm/` and `seeds/` as the projected folders, so
|
|
228
228
|
nothing outside those two — `tests/` included — reaches an installed
|
|
229
229
|
environment.
|
|
230
230
|
|
|
@@ -441,18 +441,18 @@ environment, smoke-test it there, and confirm the projection contains no
|
|
|
441
441
|
Every skill is a Markdown file with YAML frontmatter. Required frontmatter keys:
|
|
442
442
|
`title`, `description` (≤ 1024 characters), `kind`.
|
|
443
443
|
|
|
444
|
-
- `guides/_shared/
|
|
445
|
-
naming rules, progressive-disclosure pattern, three-tier dependency policy,
|
|
446
|
-
coverage. (Available in the full guide library; not bundled in this scaffold.)
|
|
444
|
+
- `guides/_shared/reference/skill-authoring-standards.md` — frontmatter key list, body
|
|
445
|
+
structure, naming rules, progressive-disclosure pattern, three-tier dependency policy,
|
|
446
|
+
and eval coverage. (Available in the full guide library; not bundled in this scaffold.)
|
|
447
447
|
|
|
448
448
|
---
|
|
449
449
|
|
|
450
450
|
## 6. Skill body and progressive disclosure
|
|
451
451
|
|
|
452
452
|
Long skills use progressive disclosure: a brief required-reading summary at the top,
|
|
453
|
-
with detail sections the agent loads on demand. This keeps context usage
|
|
453
|
+
with detail sections the agent loads on demand. This keeps context usage small.
|
|
454
454
|
|
|
455
|
-
See `guides/_shared/
|
|
455
|
+
See `guides/_shared/reference/skill-authoring-standards.md` for the full pattern.
|
|
456
456
|
|
|
457
457
|
---
|
|
458
458
|
|
|
@@ -113,6 +113,18 @@ is computed over the archive and stored alongside it. The channel descriptor is
|
|
|
113
113
|
small JSON file that records which release the channel currently points to; it is
|
|
114
114
|
the live pointer consumers use to resolve the latest version.
|
|
115
115
|
|
|
116
|
+
Packaging refuses to replace a release that already exists. When
|
|
117
|
+
`catalogue-$RELEASE.tar.gz` is already under `$OUTPUT`, the command exits 2,
|
|
118
|
+
prints the existing archive path on stderr, and writes nothing. Publish each
|
|
119
|
+
release once, from a fresh output directory. A CI step never passes `--force`;
|
|
120
|
+
only a publisher replacing a release by hand does.
|
|
121
|
+
|
|
122
|
+
To see what changed since the last release, pass the prior archive:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
agentbundle catalogue package ... --compare "/path/to/catalogue-$PRIOR.tar.gz" --format json
|
|
126
|
+
```
|
|
127
|
+
|
|
116
128
|
Re-run `agentbundle catalogue verify --archive <path>.tar.gz` after packaging to
|
|
117
129
|
confirm the archive is valid before uploading it.
|
|
118
130
|
|
|
@@ -197,10 +209,11 @@ All `agentbundle catalogue` commands follow the same convention:
|
|
|
197
209
|
|------|---------|
|
|
198
210
|
| `0` | Success |
|
|
199
211
|
| `1` | Validation or operational failure (errors in the catalogue, archive mismatch, internal error) |
|
|
200
|
-
| `2` | CLI usage error (missing required flag, unknown option) |
|
|
212
|
+
| `2` | CLI usage error (missing required flag, unknown or abbreviated option); for `catalogue package`, also a refused replacement of an existing release archive |
|
|
201
213
|
|
|
202
214
|
These codes are stable. A CI step that treats any non-zero exit as a failure
|
|
203
|
-
gets the correct behaviour.
|
|
215
|
+
gets the correct behaviour. A step that must tell a refused replacement from a
|
|
216
|
+
usage error reads exit 2 together with the `CAT-PKG-002` line on stderr.
|
|
204
217
|
|
|
205
218
|
## Credential and network boundaries
|
|
206
219
|
|
|
@@ -277,15 +290,80 @@ agentbundle catalogue package --bundle BUNDLE --release RELEASE
|
|
|
277
290
|
[--source-revision SOURCE_REVISION]
|
|
278
291
|
[--minimum-agentbundle-version VERSION]
|
|
279
292
|
[--published-at DATETIME]
|
|
293
|
+
[--flavor {runtime,source}]
|
|
294
|
+
[--force] [--compare PATH]
|
|
295
|
+
[--format {table,json}]
|
|
280
296
|
```
|
|
281
297
|
|
|
282
298
|
Required flags: `--bundle`, `--release`, `--channel`, `--output`.
|
|
283
|
-
Optional:
|
|
284
|
-
|
|
299
|
+
Optional:
|
|
300
|
+
|
|
301
|
+
| Flag | Meaning |
|
|
302
|
+
|------|---------|
|
|
303
|
+
| `--root` | Catalogue root; defaults to `.` |
|
|
304
|
+
| `--source-revision` | VCS revision recorded as audit metadata |
|
|
305
|
+
| `--minimum-agentbundle-version` | Minimum consumer version required |
|
|
306
|
+
| `--published-at` | ISO-8601 timestamp override |
|
|
307
|
+
| `--flavor` | `runtime` (default) writes the runtime archive; `source` writes the self-hosted source archive |
|
|
308
|
+
| `--force` | Replace an existing release archive instead of refusing. First-party CI never passes it |
|
|
309
|
+
| `--compare PATH` | Prior release archive to compare against; runtime flavour only |
|
|
310
|
+
| `--format` | `table` (default) or `json`; `json` writes one envelope on stdout; runtime flavour only |
|
|
311
|
+
|
|
312
|
+
`--flavor source` with `--compare` or `--format json` exits 2 with a usage
|
|
313
|
+
message and writes nothing. The subcommand rejects abbreviated options, so
|
|
314
|
+
`--forc` exits 2 rather than selecting `--force`.
|
|
315
|
+
|
|
316
|
+
**Streams.** Human output and diagnostic lines go to stderr in both formats.
|
|
317
|
+
Each diagnostic is one line, `<code>: <message>`. Stdout carries the JSON
|
|
318
|
+
envelope alone, and nothing when `--format table` is used. Text taken from the
|
|
319
|
+
prior archive is printed with non-printable characters written as escapes.
|
|
320
|
+
|
|
321
|
+
**`--format json`.** On success and on a failure after argument parsing, stdout
|
|
322
|
+
is one JSON object:
|
|
323
|
+
|
|
324
|
+
```json
|
|
325
|
+
{
|
|
326
|
+
"schema_version": 1,
|
|
327
|
+
"command": "catalogue",
|
|
328
|
+
"operation": "package",
|
|
329
|
+
"agentbundle_version": "<version>",
|
|
330
|
+
"catalogue_schema_version": 1,
|
|
331
|
+
"ok": true,
|
|
332
|
+
"diagnostics": []
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
With `--compare`, a successful run adds a `comparison` object:
|
|
337
|
+
|
|
338
|
+
```json
|
|
339
|
+
{
|
|
340
|
+
"comparison": {
|
|
341
|
+
"prior": {"archive": "<--compare value>", "bundle": "<bundle>", "release": "<release>"},
|
|
342
|
+
"packs": {"added": [], "removed": [], "changed": [], "unchanged": 0},
|
|
343
|
+
"profiles": {"added": [], "removed": [], "changed": [], "unchanged": 0}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
Added and removed pack items are `{name, version, digest}`; profile items are
|
|
349
|
+
`{name, digest}`. A changed pack is `{name, version: {from, to}, digest: {from, to}}`;
|
|
350
|
+
a changed profile is `{name, digest: {from, to}}`. Each list is sorted by name and
|
|
351
|
+
`unchanged` is a count. A failed run has `ok` false, the failing codes in
|
|
352
|
+
`diagnostics`, and no `comparison`. The human comparison on stderr marks a pack
|
|
353
|
+
whose content changed under an unchanged version with
|
|
354
|
+
`content changed, version unchanged`.
|
|
355
|
+
|
|
356
|
+
**Exit codes.**
|
|
357
|
+
|
|
358
|
+
| Code | Meaning |
|
|
359
|
+
|------|---------|
|
|
360
|
+
| `0` | Packaged; with `--force`, a replaced release also exits 0 |
|
|
361
|
+
| `1` | Failure: verification, an unreadable or invalid `--compare` archive, or an internal error |
|
|
362
|
+
| `2` | Usage error, or a refused replacement of an existing release archive (`CAT-PKG-002`) |
|
|
285
363
|
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
364
|
+
The refusal applies to both flavours and runs before any file is written. The
|
|
365
|
+
deprecated top-level `package-catalogue` command is unchanged and exits 1 on the
|
|
366
|
+
same refusal.
|
|
289
367
|
|
|
290
368
|
## See also
|
|
291
369
|
|
{agentbundle-0.52.0 → agentbundle-0.53.0}/agentbundle/_data/catalogue-scaffold/manifest.json
RENAMED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"files": {
|
|
3
|
-
"guides/_shared/reference/catalogue-authoring-standards.md": "
|
|
4
|
-
"guides/_shared/reference/catalogue-ci-contract.md": "
|
|
3
|
+
"guides/_shared/reference/catalogue-authoring-standards.md": "0b85918871438d7410f31d5e42eeebdf86892e8156428ed4eebdb7acc1e5f933",
|
|
4
|
+
"guides/_shared/reference/catalogue-ci-contract.md": "304c149ae6a3bd32b404b3c384b511266eec8e4e6dd58aa26ec4b9dd1d8f06cd",
|
|
5
5
|
"packs/AGENTS.md": "c20af03f72b4c25c032ba5c15299eadaa0b41442c92d1cf621dde042cf9ff8db",
|
|
6
6
|
"packs/CLAUDE.md": "336cc4fbf19beaada7ccf9986414fa91851a8d7a07dfb3ccbe800a69eed0ab49",
|
|
7
7
|
"packs/README.md": "d2de5f9556f4c8e521103474bde74636e02cc805f9bf5312a3a61a1f3eb45d8f",
|
|
@@ -3,12 +3,17 @@
|
|
|
3
3
|
"title": "Guide frontmatter",
|
|
4
4
|
"description": "YAML frontmatter schema for catalogue-facing guide files under guides/.",
|
|
5
5
|
"type": "object",
|
|
6
|
-
"required": [
|
|
6
|
+
"required": [
|
|
7
|
+
"title",
|
|
8
|
+
"summary",
|
|
9
|
+
"pack",
|
|
10
|
+
"kind"
|
|
11
|
+
],
|
|
7
12
|
"properties": {
|
|
8
13
|
"title": {
|
|
9
14
|
"type": "string",
|
|
10
15
|
"minLength": 1,
|
|
11
|
-
"description": "Page title
|
|
16
|
+
"description": "Page title \u2014 used by the docs-site renderer as the heading."
|
|
12
17
|
},
|
|
13
18
|
"summary": {
|
|
14
19
|
"type": "string",
|
|
@@ -22,8 +27,13 @@
|
|
|
22
27
|
},
|
|
23
28
|
"kind": {
|
|
24
29
|
"type": "string",
|
|
25
|
-
"enum": [
|
|
26
|
-
|
|
30
|
+
"enum": [
|
|
31
|
+
"tutorial",
|
|
32
|
+
"how-to",
|
|
33
|
+
"reference",
|
|
34
|
+
"explanation"
|
|
35
|
+
],
|
|
36
|
+
"description": "Di\u00e1taxis kind \u2014 a page contract, not a directory requirement."
|
|
27
37
|
},
|
|
28
38
|
"slug": {
|
|
29
39
|
"type": "string",
|
|
@@ -49,8 +59,23 @@
|
|
|
49
59
|
},
|
|
50
60
|
"status": {
|
|
51
61
|
"type": "string",
|
|
52
|
-
"enum": [
|
|
62
|
+
"enum": [
|
|
63
|
+
"draft",
|
|
64
|
+
"review",
|
|
65
|
+
"stable",
|
|
66
|
+
"deprecated"
|
|
67
|
+
],
|
|
53
68
|
"description": "Optional publication status. Defaults to 'stable' when absent."
|
|
69
|
+
},
|
|
70
|
+
"uses": {
|
|
71
|
+
"type": "array",
|
|
72
|
+
"minItems": 1,
|
|
73
|
+
"uniqueItems": true,
|
|
74
|
+
"items": {
|
|
75
|
+
"type": "string",
|
|
76
|
+
"pattern": "^[a-z0-9][a-z0-9-]*$"
|
|
77
|
+
},
|
|
78
|
+
"description": "Packs a reader needs for this page, shown as pills above the title. Defaults to `pack` when that is a real pack."
|
|
54
79
|
}
|
|
55
80
|
},
|
|
56
81
|
"additionalProperties": false
|
|
@@ -4883,7 +4883,7 @@ def extract_top_level_backlog(workspace: dict) -> list[ShapingEntry]:
|
|
|
4883
4883
|
|
|
4884
4884
|
|
|
4885
4885
|
_SHAPING_TYPE_TO_SKILL: dict[str, str] = {
|
|
4886
|
-
"shape": "
|
|
4886
|
+
"shape": "intent",
|
|
4887
4887
|
"research": "desk-research-project-start",
|
|
4888
4888
|
"strategy": "frame-situation",
|
|
4889
4889
|
"design": "experience-status",
|
|
@@ -4910,10 +4910,10 @@ def check_shaping_guard(
|
|
|
4910
4910
|
continue
|
|
4911
4911
|
for entry in ini.shaping.active + ini.shaping.backlog:
|
|
4912
4912
|
if entry.slug == spec_slug:
|
|
4913
|
-
return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "
|
|
4913
|
+
return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "intent")
|
|
4914
4914
|
for entry in (top_level_backlog or []):
|
|
4915
4915
|
if entry.slug == spec_slug:
|
|
4916
|
-
return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "
|
|
4916
|
+
return _SHAPING_TYPE_TO_SKILL.get(entry.entry_type, "intent")
|
|
4917
4917
|
return None
|
|
4918
4918
|
|
|
4919
4919
|
|
|
@@ -9,7 +9,9 @@ from __future__ import annotations
|
|
|
9
9
|
|
|
10
10
|
import hashlib
|
|
11
11
|
import json
|
|
12
|
+
import stat
|
|
12
13
|
import tarfile
|
|
14
|
+
from collections.abc import Mapping
|
|
13
15
|
from pathlib import Path
|
|
14
16
|
|
|
15
17
|
from agentbundle.catalogue import CatalogueError
|
|
@@ -36,6 +38,34 @@ def _get_agentbundle_version() -> str:
|
|
|
36
38
|
return _AGENTBUNDLE_VERSION
|
|
37
39
|
|
|
38
40
|
|
|
41
|
+
def unit_digest(file_digests: Mapping[str, str], unit_path: str) -> str | None:
|
|
42
|
+
"""Return the unit digest of ``unit_path`` over ``file_digests`` (AC-0001).
|
|
43
|
+
|
|
44
|
+
``file_digests`` maps archived relative paths to lowercase hex SHA-256.
|
|
45
|
+
If it holds ``unit_path`` exactly, the unit is that one file, named by its
|
|
46
|
+
basename; otherwise it is the directory of files under ``unit_path + "/"``.
|
|
47
|
+
Returns ``None`` when no member file exists.
|
|
48
|
+
"""
|
|
49
|
+
if unit_path in file_digests:
|
|
50
|
+
members = {unit_path.rsplit("/", 1)[-1]: file_digests[unit_path]}
|
|
51
|
+
else:
|
|
52
|
+
prefix = unit_path + "/"
|
|
53
|
+
members = {
|
|
54
|
+
path[len(prefix):]: digest
|
|
55
|
+
for path, digest in file_digests.items()
|
|
56
|
+
if path.startswith(prefix)
|
|
57
|
+
}
|
|
58
|
+
if not members:
|
|
59
|
+
return None
|
|
60
|
+
# Sort by UTF-8 bytes, not code points, to honour "byte order".
|
|
61
|
+
lines = sorted(
|
|
62
|
+
(rel.encode("utf-8"), f"{digest} {rel}\n")
|
|
63
|
+
for rel, digest in members.items()
|
|
64
|
+
)
|
|
65
|
+
preimage = "".join(line for _, line in lines)
|
|
66
|
+
return "sha256:" + hashlib.sha256(preimage.encode("utf-8")).hexdigest()
|
|
67
|
+
|
|
68
|
+
|
|
39
69
|
def _err(code: str, message: str, path: str | None = None) -> Diagnostic:
|
|
40
70
|
return Diagnostic(
|
|
41
71
|
code=code,
|
|
@@ -193,7 +223,83 @@ def _parse_manifest(
|
|
|
193
223
|
return None, [_err("CAT-V-ARC-010", f"{_MANIFEST_NAME} parse error: {exc}")]
|
|
194
224
|
|
|
195
225
|
|
|
196
|
-
def
|
|
226
|
+
def _entry_label(kind: str, index: int, item: object) -> str:
|
|
227
|
+
"""Name a manifest entry for a diagnostic: its ``name`` when a string, else its index."""
|
|
228
|
+
if isinstance(item, str):
|
|
229
|
+
return f"{kind}[{index}] {item!r}"
|
|
230
|
+
if isinstance(item, dict) and isinstance(item.get("name"), str):
|
|
231
|
+
return f"{kind}[{index}] {item['name']!r}"
|
|
232
|
+
return f"{kind}[{index}]"
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
def _check_unit_entry_fields(label: str, item: dict) -> list[Diagnostic]:
|
|
236
|
+
"""AC-0018: ``path`` and ``digest`` must be strings, and ``digest`` needs ``path``."""
|
|
237
|
+
diags: list[Diagnostic] = []
|
|
238
|
+
for field in ("path", "digest"):
|
|
239
|
+
if field in item and not isinstance(item[field], str):
|
|
240
|
+
diags.append(_err("CAT-V-ARC-019", f"manifest {label} {field!r} must be a string"))
|
|
241
|
+
if "digest" in item and "path" not in item:
|
|
242
|
+
diags.append(_err("CAT-V-ARC-019", f"manifest {label} has a 'digest' but no 'path'"))
|
|
243
|
+
return diags
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def _check_manifest_shape(manifest: dict) -> list[Diagnostic]:
|
|
247
|
+
"""AC-0018 shape checks over ``files``, ``packs`` and ``profiles``; one diagnostic per item."""
|
|
248
|
+
diags: list[Diagnostic] = []
|
|
249
|
+
files = manifest.get("files")
|
|
250
|
+
if isinstance(files, list):
|
|
251
|
+
for i, item in enumerate(files):
|
|
252
|
+
if not (
|
|
253
|
+
isinstance(item, dict)
|
|
254
|
+
and isinstance(item.get("path"), str)
|
|
255
|
+
and isinstance(item.get("sha256"), str)
|
|
256
|
+
):
|
|
257
|
+
diags.append(_err(
|
|
258
|
+
"CAT-V-ARC-019",
|
|
259
|
+
f"manifest {_entry_label('files', i, item)} must be an object "
|
|
260
|
+
"with string 'path' and 'sha256'",
|
|
261
|
+
))
|
|
262
|
+
packs = manifest.get("packs")
|
|
263
|
+
if isinstance(packs, list):
|
|
264
|
+
for i, item in enumerate(packs):
|
|
265
|
+
label = _entry_label("packs", i, item)
|
|
266
|
+
if not (
|
|
267
|
+
isinstance(item, dict)
|
|
268
|
+
and isinstance(item.get("name"), str)
|
|
269
|
+
and isinstance(item.get("version"), str)
|
|
270
|
+
):
|
|
271
|
+
diags.append(_err(
|
|
272
|
+
"CAT-V-ARC-019",
|
|
273
|
+
f"manifest {label} must be an object with string 'name' and 'version'",
|
|
274
|
+
))
|
|
275
|
+
if isinstance(item, dict):
|
|
276
|
+
diags.extend(_check_unit_entry_fields(label, item))
|
|
277
|
+
if "profiles" in manifest:
|
|
278
|
+
profiles = manifest["profiles"]
|
|
279
|
+
if not isinstance(profiles, list):
|
|
280
|
+
diags.append(_err("CAT-V-ARC-019", "manifest 'profiles' must be a list"))
|
|
281
|
+
else:
|
|
282
|
+
for i, item in enumerate(profiles):
|
|
283
|
+
label = _entry_label("profiles", i, item)
|
|
284
|
+
if isinstance(item, str):
|
|
285
|
+
continue
|
|
286
|
+
if not (isinstance(item, dict) and isinstance(item.get("name"), str)):
|
|
287
|
+
diags.append(_err(
|
|
288
|
+
"CAT-V-ARC-019",
|
|
289
|
+
f"manifest {label} must be a string or an object with a string 'name'",
|
|
290
|
+
))
|
|
291
|
+
if isinstance(item, dict):
|
|
292
|
+
diags.extend(_check_unit_entry_fields(label, item))
|
|
293
|
+
return diags
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
def _check_manifest_schema(manifest: object) -> list[Diagnostic]:
|
|
297
|
+
"""Check manifest schema and shape; accepts any parsed JSON value without raising."""
|
|
298
|
+
if not isinstance(manifest, dict):
|
|
299
|
+
return [_err(
|
|
300
|
+
"CAT-V-ARC-019",
|
|
301
|
+
f"manifest must be a JSON object, got {type(manifest).__name__}",
|
|
302
|
+
)]
|
|
197
303
|
diags: list[Diagnostic] = []
|
|
198
304
|
schema = manifest.get("schema")
|
|
199
305
|
if schema not in (1, 2):
|
|
@@ -208,6 +314,31 @@ def _check_manifest_schema(manifest: dict) -> list[Diagnostic]:
|
|
|
208
314
|
diags.append(_err("CAT-V-ARC-011", "manifest 'files' must be a list"))
|
|
209
315
|
if not isinstance(manifest.get("packs"), list):
|
|
210
316
|
diags.append(_err("CAT-V-ARC-011", "manifest 'packs' must be a list"))
|
|
317
|
+
diags.extend(_check_manifest_shape(manifest))
|
|
318
|
+
return diags
|
|
319
|
+
|
|
320
|
+
|
|
321
|
+
def _check_unit_digests(manifest: dict) -> list[Diagnostic]:
|
|
322
|
+
"""AC-0005: each declared unit ``digest`` must equal the unit digest of its ``path``.
|
|
323
|
+
|
|
324
|
+
Entries without a ``digest`` (legacy manifests) are skipped (AC-0006). Runs only on
|
|
325
|
+
manifests that passed ``_check_manifest_schema``, so entries are well typed.
|
|
326
|
+
"""
|
|
327
|
+
file_digests = {e["path"]: e["sha256"] for e in manifest["files"]}
|
|
328
|
+
diags: list[Diagnostic] = []
|
|
329
|
+
for kind in ("packs", "profiles"):
|
|
330
|
+
for i, item in enumerate(manifest.get(kind, [])):
|
|
331
|
+
if not isinstance(item, dict) or "digest" not in item:
|
|
332
|
+
continue
|
|
333
|
+
expected = item["digest"]
|
|
334
|
+
actual = unit_digest(file_digests, item["path"])
|
|
335
|
+
if actual != expected:
|
|
336
|
+
diags.append(_err(
|
|
337
|
+
"CAT-V-ARC-018",
|
|
338
|
+
f"unit digest mismatch for {_entry_label(kind, i, item)} "
|
|
339
|
+
f"path {item['path']!r}: declared {expected!r}, computed {actual!r}",
|
|
340
|
+
path=item["path"],
|
|
341
|
+
))
|
|
211
342
|
return diags
|
|
212
343
|
|
|
213
344
|
|
|
@@ -411,17 +542,43 @@ def verify_archive(archive: Path, sha256_file: Path | None = None) -> VerifyResu
|
|
|
411
542
|
|
|
412
543
|
manifest, manifest_diags = _parse_manifest(tf, members)
|
|
413
544
|
diags.extend(manifest_diags)
|
|
414
|
-
if
|
|
545
|
+
if manifest_diags:
|
|
415
546
|
return _make_result(diags, "archive")
|
|
416
547
|
|
|
417
548
|
diags.extend(_check_manifest_schema(manifest))
|
|
418
549
|
if any(d.severity == Severity.ERROR for d in diags):
|
|
419
550
|
return _make_result(diags, "archive")
|
|
551
|
+
assert isinstance(manifest, dict) # a non-object manifest yields CAT-V-ARC-019 above
|
|
420
552
|
|
|
421
553
|
diags.extend(_check_all_manifest_digests(tf, members, manifest))
|
|
554
|
+
diags.extend(_check_unit_digests(manifest))
|
|
422
555
|
diags.extend(_check_no_undeclared_members(members, manifest))
|
|
423
556
|
diags.extend(_check_catalogue_markers(members))
|
|
424
557
|
diags.extend(_check_marketplace_entries(tf, members))
|
|
425
558
|
diags.extend(_check_min_agentbundle_compat(manifest))
|
|
426
559
|
|
|
427
560
|
return _make_result(diags, "archive")
|
|
561
|
+
|
|
562
|
+
|
|
563
|
+
def read_verified_manifest(archive: Path) -> tuple[dict | None, VerifyResult]:
|
|
564
|
+
"""Return the manifest of ``archive`` only when ``verify_archive`` passes on it.
|
|
565
|
+
|
|
566
|
+
A path that is not a regular file is refused before it is opened (AC-0023).
|
|
567
|
+
The archive is read in memory; nothing is extracted to disk. The manifest is
|
|
568
|
+
``None`` whenever the returned result is not ok.
|
|
569
|
+
"""
|
|
570
|
+
try:
|
|
571
|
+
is_regular = stat.S_ISREG(archive.stat().st_mode)
|
|
572
|
+
problem = None if is_regular else f"not a regular file: {archive}"
|
|
573
|
+
except OSError as exc:
|
|
574
|
+
problem = f"cannot read archive: {exc}"
|
|
575
|
+
if problem is not None:
|
|
576
|
+
return None, _make_result([_err("CAT-V-ARC-002", problem)], "archive")
|
|
577
|
+
result = verify_archive(archive)
|
|
578
|
+
if not result.ok:
|
|
579
|
+
return None, result
|
|
580
|
+
with tarfile.open(archive, "r:gz") as tf:
|
|
581
|
+
manifest, diags = _parse_manifest(tf, tf.getmembers())
|
|
582
|
+
if diags or not isinstance(manifest, dict):
|
|
583
|
+
return None, _make_result(diags, "archive")
|
|
584
|
+
return manifest, result
|