agentbundle 0.52.1__tar.gz → 0.53.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {agentbundle-0.52.1/agentbundle.egg-info → agentbundle-0.53.1}/PKG-INFO +20 -1
- {agentbundle-0.52.1 → agentbundle-0.53.1}/README-pypi.md +19 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +8 -8
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +85 -7
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/manifest.json +2 -2
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/guide.schema.json +30 -5
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/archive.py +159 -2
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/initialise.py +56 -3
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/package.py +252 -28
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/results.py +7 -1
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/cli.py +22 -1
- agentbundle-0.53.1/agentbundle/commands/catalogue_package.py +196 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/catalogue_sync.py +4 -3
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/version.py +1 -1
- {agentbundle-0.52.1 → agentbundle-0.53.1/agentbundle.egg-info}/PKG-INFO +20 -1
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle.egg-info/SOURCES.txt +6 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/pyproject.toml +1 -1
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_init.py +6 -1
- agentbundle-0.53.1/tests/integration/test_catalogue_init_packageable.py +165 -0
- agentbundle-0.53.1/tests/unit/test_catalogue_archive_unit_digests.py +194 -0
- agentbundle-0.53.1/tests/unit/test_catalogue_package_compare.py +523 -0
- agentbundle-0.53.1/tests/unit/test_catalogue_package_include_diagnostic.py +154 -0
- agentbundle-0.53.1/tests/unit/test_catalogue_package_refusal.py +331 -0
- agentbundle-0.53.1/tests/unit/test_catalogue_unit_digests.py +178 -0
- agentbundle-0.52.1/agentbundle/commands/catalogue_package.py +0 -98
- {agentbundle-0.52.1 → agentbundle-0.53.1}/MANIFEST.in +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/README.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/__main__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/adapter.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/adapter.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/agent-plugin-extension-namespaces.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/agent-plugin-extension-namespaces.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-index.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/packs/CLAUDE.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/evals/eval_queries.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/profiles/CLAUDE.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_gemini_admissibility.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_layout_declared_section.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_shared_library_boundaries.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/catalogue.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/close_work.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/cooling.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/distribution-routes.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/distribution-routes.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/file_safety.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/install-marker.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/knowledge-captured-observation.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/marketplace-entry.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/pack.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/plugin-manifest.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/profile.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/public-contracts.txt +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/skill-manifest.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/skill.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/target-vocab.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/LICENSE.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/PROVENANCE.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/mcp.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/vendor/agent-plugins/1.0.0/plugin.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/work_intake_refresh.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/workspace_status_engine.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/_data/workspace_status_prune.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/bounded_metadata.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/__main__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapter_root_bins.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapters/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapters/_sweep_guard.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapters/claude_code.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapters/codex.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapters/copilot.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapters/cursor.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapters/gemini.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapters/kiro.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapters/kiro_cli.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/adapters/kiro_ide.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/contract.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/hook_wiring_rules.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/lint_packs.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/main.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/phase_order.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projection_io.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/codex_agent_toml.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/copilot_agent_md.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/direct_directory.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/gemini_command_toml.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/hook_id.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/merge_json.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/plugin_hooks.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/projections/user_merge_json.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/recipes/marketplace.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/recipes/per-pack-agent-plugin.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/recipes/self-host.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/route_agent_plugin.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/route_apm.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/route_claude_plugins.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/route_lookup.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/scope_rails.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/self_host.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/shared_libs.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/target_resolver.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/user_libs.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/build/validate.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_fetch/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_fetch/direct_http.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_fetch/jfrog_cli.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_fetch/models.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/build.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/config.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/contracts_inspector.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/defaults.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/file_safety.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/identity.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/index_generator.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/journey_validator.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/lint.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/manifest.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/okf_discovery.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/self_host.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/verify.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/catalogue_tooling/version_ranges.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/categories.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/_common.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/_drop_warning.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/adapt.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/catalogue_build.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/catalogue_contracts.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/catalogue_index.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/catalogue_init.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/catalogue_lint.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/catalogue_self_host.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/catalogue_verify.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/config.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/diff.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/docs.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/init_state.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/install.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/list_installed.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/list_packs.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/list_profiles.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/list_targets.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/oplog_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/pack_config_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/pack_evals.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/package_catalogue.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/profile.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/reconcile.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/render.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/scaffold.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/show.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/uninstall.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/upgrade.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/commands/validate.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/config.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/direct_install.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/direct_source.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/direct_source_acquisition.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/direct_source_state.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/direct_validate.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/https_catalogue.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/local_exclude.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/oplog.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/pack_inventory.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/render.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/safety.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/scaffold.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/scope.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/source_defaults.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/statelock.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/system_trust.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/user_config.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle/workspace_mcp.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle.egg-info/dependency_links.txt +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle.egg-info/entry_points.txt +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle.egg-info/requires.txt +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/agentbundle.egg-info/top_level.txt +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/conftest.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/setup.cfg +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/templates/install-marker.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/_direct_acquisition.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/_support.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/README.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/claude-code-2.1.226-hook-events.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/claude-code-2.1.228-hook-events.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/core/.apm/agents/bar.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/core/.apm/commands/qux.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/baz.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/qux.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/core/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/core/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/governance-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/governance-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/governance-extras/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/monorepo-extras/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/product-documentation/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/product-documentation/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/product-documentation/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/fixtures/recipes/bogus-target.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_adapter_claude_code.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_adapter_codex.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_adapter_copilot.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_adapter_cursor.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_adapter_gemini.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_adapter_kiro.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_adapter_kiro_alias.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_adapter_kiro_cli.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_adapter_kiro_ide.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_adapter_root_bins_projection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_agent_boundary_metadata_projection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_agent_plugin_projection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_build_ships_seeds.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_contract.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_contract_scope.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_contract_v07.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_contract_v08.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_direct_directory_cleanup.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_distribution_route_contract.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_distribution_route_golden.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_distribution_route_resolution.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_end_to_end_build.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_hook_wiring_rules.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_lint_packs.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_load_pack_hook_wiring_safely.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_pack_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_pack_schema_allowed_adapters.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_pack_schema_install.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_pipeline.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_plugin_hooks.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_plugin_manifest_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_plugin_publication_gates.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_policy_registry_projection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_projectable_subset.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_projection_io.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_projections_merge_json.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_route_lookup.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_scope_rails.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_security.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_self_host_check.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_self_host_fixture_guard.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_self_host_metadata_policy.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_self_host_recipe_config.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_sequential_implementer_dispatch_projection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_shared_libs_projection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_shared_prefix_contract.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_user_libs_projection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_validate.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/build_pipeline/test_writers_emit_lf.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/conftest.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/contracts/test_agentbundle_show_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/contracts/test_catalogue_fetch_credential_boundary.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/contracts/test_skill_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/adapt/.adapt-discovery.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/adapt/values.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/catalogue.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/packs/.gitkeep +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/packs/_example/README.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/packs/_example/evals/eval_queries.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/packs/_example/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/profiles/.gitkeep +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/profiles/_example/README.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/blank_catalogue/profiles/_example/profile.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield/values.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt/AGENTS.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt/AGENTS.upstream.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt/DESIGN.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt/EXPECTED_TREE.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt/docs/CHARTER.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt/docs/guides/how-to/index.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt/docs/howto/getting-started.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt-expected/AGENTS.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt-expected/docs/CHARTER.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/.adapt-discovery.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/state.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/catalogue_sync/adapter_contract_major_mismatch/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/catalogue_wave4/catalogue.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/hook-wiring/example.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/skills/example-skill/scripts/run.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/JOURNEY.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/catalogue_wave4/packs/pack-without-journey/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/catalogue_wave4/profiles/test-profile.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/cognitive-load-hosts.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/argv-flag/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/argv-flag/scripts/cli.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/argv-flag-derived/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/argv-flag-derived/scripts/cli.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/argv-flag-normalised/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/argv-flag-normalised/scripts/cli.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/conforming/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/conforming/scripts/cli.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/dotfile-grep/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/dotfile-grep/scripts/leak.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/dotfile-with-optout/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/dotfile-with-optout/scripts/legit.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/mcp-server-headers/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/mcp-server-headers/scripts/cli.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/creds/skills/missing-dont-block/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/direct/ac35_corpus_verdicts.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/direct/golden_state_0_5.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/distribution-routes/golden.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/distribution-routes/witness-packs/portable/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/distribution-routes/witness-packs/portable/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/AGENTS.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/LICENSE-APACHE +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/LICENSE-MIT +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/catalogue.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/packs/alpha/seeds/AGENTS.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/packs/beta/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/external_catalogue/profiles/example.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/agents/helper.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/commands/cmd.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/hook-wiring/run.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/hooks/run.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/install/catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/install/catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/install/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/kiro_ide_hook/ask_agent_basic.kiro.hook +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/kiro_ide_hook/run_command_with_placeholder.kiro.hook +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/lint_packs/clean/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/lint_packs/clean/seeds/README.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/list-installed/golden_120col.txt +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/list-installed/golden_80col.txt +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/list_packs/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/list_packs/catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/.apm/skills/local-test/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/cc-user-hooks/.apm/hook-wiring/on-prompt.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/cc-user-hooks/.apm/hooks/on-prompt.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/cc-user-hooks/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/kiro-repo-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/kiro-repo-hooks/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/kiro-user-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/kiro-user-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/kiro-user-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/kiro-user-hooks/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-missing-attach/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-pascal-events/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/packs/malformed-kiro-unknown-agent/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/scaffold/test-pack/seeds/AGENTS.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/scaffold/test-pack/seeds/_agents-footer.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/scaffold/test-pack/seeds/docs/CHARTER.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/show_contract/agentbundle-show.schema.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/show_contract/catalogue.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/show_contract/installed_state.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v1/packs/core/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v2/packs/core/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/upgrade/catalogue_v3/packs/core/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/validate/bad_recipe_pack/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/validate/malformed_pack/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/validate/valid_pack/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/fixtures/validate/version_mismatch_pack/pack.toml +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_adapt_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_adapt_dual_scope.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_adapt_preflight_detection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_adapt_schema_migration.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_apm_install_route.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_blank_catalogue.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_brownfield_adapt_end_to_end.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_brownfield_round_trip.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_brownfield_user_home_fixture.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_build_check_drift_gates.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_build_derivation_apm.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_build_derivation_claude_plugins.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_verify_adapter_compat.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_verify_dependencies.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_verify_external_portability.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_verify_fixture_checks.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_verify_marketplace.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_verify_output_drift.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_verify_package_preflight.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_verify_plugin_path.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_verify_profile_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_verify_step1.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_wave4_index_generator.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_wave4_integration.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_wave4_journey_validator.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_catalogue_wave4_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_cc_user_hooks_fixture.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_claude_plugins_install_route.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_config_cascade.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_credential_brokers_pack_install.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_credentials_wheel.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_direct_install.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_discovery_schema_cross_consumer.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_editable_source_detection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_fixtures_validate.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_hook_wiring_ingress.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_adapt_chain.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_converters_user_scope.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_copilot_full_parity.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_core_smoke.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_default_source.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_dependencies_gate.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_dual_scope.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_layout_is_best_effort.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_orphan_reshape.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_pack_metadata_shape.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_profile.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_profile_live.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_repo_scope_per_adapter.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_research_user_scope.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_seed_delivery.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_session_start_wiring.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_upgrade_offer.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_user_hooks.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_install_user_scope_allowed_adapters.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_jfrog_cli_contract.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_kiro_ide_hook_e2e.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_kiro_repo_hooks_fixture.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_kiro_user_hooks_fixture.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_list_packs_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_local_scope_install.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_marketplace_entry_validation.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_marketplace_manifest_regression.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_multi_pack_install.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_orphan_cleanup_respects_foreign_state.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_plugin_route_membership.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_portable_catalogue_authentication.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_recommends_cross_scope.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_reconcile.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_reserved_path_filter.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_scaffold_projection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_self_host_schema_migration.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_self_host_sweep_respects_state.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_shared_prefix_coexistence.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_show_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_tier_invariants.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_trust_fallback_tls.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_uninstall_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_uninstall_user_hooks.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_upgrade_attach_to_agent.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_upgrade_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_upgrade_user_hooks.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_version_gate_matrix.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_workspace_mcp_git_fsm.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/integration/test_zipapp.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/performance/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/performance/test_direct_family2_budget_cost.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/test_adapter_permissions_projection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/test_workspace_mcp_elicit.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/test_workspace_mcp_event_bridge.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/test_workspace_mcp_git.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/test_workspace_mcp_git_scope.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/test_workspace_mcp_layout_override.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/test_workspace_mcp_lifecycle.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/test_workspace_mcp_stdin.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/test_workspace_mcp_tools.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/__init__.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/conftest.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_adapt_discovery_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_adapter_symlink_policy.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_append_layout_section.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_architect_readme_install_command.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_ci_contract.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_curation_deps.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_fetch.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_fetch_jfrog.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_init_cli_self_hosted.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_pack_defaults.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_self_hosted_export_removal.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_skill_spec_lint.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_sync.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_sync_fixture_set.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_archive.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_build.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_defaults.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_file_safety.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_foundation.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_identity.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_init.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_lint.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_package.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_self_host.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_self_hosted_init.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_source_package.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_tooling_verify.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_trust_fallback.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_wave2_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_wave2_validation.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_wave3_contracts_cli.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_wave3_contracts_inspector.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_wave3_init_nextsteps.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_catalogue_wave3_offline_navigation.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_cli_catalogue_optional.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_cli_help_lists_config.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_cli_list_targets_help.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_cli_namespace_fixture.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_cli_path_normalisation.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_cli_profile_surface.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_cli_scope_flags.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_codex_agent_toml.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_codex_projection_modes.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_cognitive_load_seed_contract.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_collect_tree_symlinks.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_common_classify_seeds.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_config.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_config_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_configured_adapter.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_confirm_helper.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_contract_parity.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_contract_v0_3_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_copilot_agent_md.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_copilot_hooks_json.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_copilot_user_scope_wiring.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_credbroker_lint_hardening.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_dependencies_batch.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_diff_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_direct_admission.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_direct_architecture_controls.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_direct_diagnostics.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_direct_lifecycle_facts.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_direct_source_acquisition.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_direct_source_state.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_direct_upgrade.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_direct_validate.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_footprint_ownership.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_https_catalogue.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_init_state_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_argparse_adapter_flag.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_argparse_emit_install_routes.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_defaults_preferred_adapter.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_event_dropped_wirings.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_first_value_handoff.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_force_help.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_inband_detection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_messages.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_messages_repo_scope.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_refusal_ordering.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_install_state_provenance.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_kiro_ide_hook_projection.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_kiro_ide_hook_rail.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_kiro_ide_hook_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_layout_bases_anchoring.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_lint_agent_artifacts_metadata_auth.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_list_installed_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_list_installed_status.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_list_targets_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_exclude_git_cache.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_scope_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_scope_t10_uninstall.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_scope_t12_show.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_scope_t2_resolve.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_scope_t3_config.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_scope_t4_state_path.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_scope_t5_list_installed.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_scope_t7_install_gates.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_scope_t8_install.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_local_scope_t9_exclude.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_marker_schema_version_parity.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_merge_into_agent_json.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_multi_adapter_disambiguator.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_nested_symlink_hardening.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_offer_upgrade_namespace.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_okf_discovery.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_org_bootstrap.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_orphan_sweep_guards.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_pack_config_api.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_pack_inventory.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_pack_layout_section_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_package_catalogue.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_packstate_source_provenance.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_pipeline_phase_order.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_plugin_scope_filter.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_profile_reader.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_render.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_render_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_render_table.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_resolve_state_path.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_resolve_target_adapter_user_config.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_resolve_user_scope_target_adapter.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_route_surface_parity.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_safety.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_safety_repo_scope_prefixes.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_safety_scan_per_pack_scoping.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_scaffold_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_scope.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_self_host_windows.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_shared_prefix_disclosure.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_source_conflict_guard.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_source_defaults.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_state_v01_refuse_write.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_state_v02.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_state_v0_4_schema.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_statelock.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_statelock_hardening.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_system_trust.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_target_resolver.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_toml_emitters.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_unresolved_markers.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_upgrade_bulk_all.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_upgrade_recap.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_upgrade_source_inference.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_user_config_io.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_user_config_isolation.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_user_config_path.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_user_config_source.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_user_merge_json.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_validate_attach_to_agent.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_validate_categories.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_validate_cmd.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_validate_hook_wiring_per_file_compatibility.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_values_from_shapes.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_version.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/tests/unit/test_windows_direct_suite_registration.py +0 -0
- {agentbundle-0.52.1 → agentbundle-0.53.1}/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.1
|
|
4
4
|
Summary: npm for your coding agent. Install packs of skills, subagents, and hooks into any repo, for every major agent.
|
|
5
5
|
Author-email: eugenelim <eugenelim@users.noreply.github.com>
|
|
6
6
|
License-Expression: Apache-2.0 OR MIT
|
|
@@ -35,6 +35,25 @@ 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.1
|
|
39
|
+
|
|
40
|
+
`agentbundle catalogue init` now writes a root `AGENTS.md` and a `CLAUDE.md`, so
|
|
41
|
+
a new catalogue packages and verifies with no hand edits. A bad
|
|
42
|
+
`[catalogue.package].include` entry fails with a `CAT-PKG-001` message, not a
|
|
43
|
+
traceback. An `include` entry that names a `_` directory under `packs/`, such as
|
|
44
|
+
`packs/_example`, now fails too and must be removed; an empty `include` packages
|
|
45
|
+
every non-`_` pack, so list the packs to ship instead. A catalogue made by an
|
|
46
|
+
earlier release needs a root `AGENTS.md` added by hand.
|
|
47
|
+
|
|
48
|
+
## What's new in 0.53.0
|
|
49
|
+
|
|
50
|
+
`agentbundle catalogue package` now refuses to replace a release archive that
|
|
51
|
+
already exists and exits 2; `--force` replaces it on purpose. `--compare
|
|
52
|
+
<archive>` lists the packs and profiles added, removed or changed since a prior
|
|
53
|
+
release, and `--format json` writes that result on stdout. Shortened options
|
|
54
|
+
such as `--forc` are rejected, and each `profiles` entry in the manifest is now
|
|
55
|
+
an object with a `path` and a `digest`.
|
|
56
|
+
|
|
38
57
|
## What's new in 0.52.1
|
|
39
58
|
|
|
40
59
|
The workspace-status engine and MCP tool now route `shape` entries to
|
|
@@ -14,6 +14,25 @@ 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.1
|
|
18
|
+
|
|
19
|
+
`agentbundle catalogue init` now writes a root `AGENTS.md` and a `CLAUDE.md`, so
|
|
20
|
+
a new catalogue packages and verifies with no hand edits. A bad
|
|
21
|
+
`[catalogue.package].include` entry fails with a `CAT-PKG-001` message, not a
|
|
22
|
+
traceback. An `include` entry that names a `_` directory under `packs/`, such as
|
|
23
|
+
`packs/_example`, now fails too and must be removed; an empty `include` packages
|
|
24
|
+
every non-`_` pack, so list the packs to ship instead. A catalogue made by an
|
|
25
|
+
earlier release needs a root `AGENTS.md` added by hand.
|
|
26
|
+
|
|
27
|
+
## What's new in 0.53.0
|
|
28
|
+
|
|
29
|
+
`agentbundle catalogue package` now refuses to replace a release archive that
|
|
30
|
+
already exists and exits 2; `--force` replaces it on purpose. `--compare
|
|
31
|
+
<archive>` lists the packs and profiles added, removed or changed since a prior
|
|
32
|
+
release, and `--format json` writes that result on stdout. Shortened options
|
|
33
|
+
such as `--forc` are rejected, and each `profiles` entry in the manifest is now
|
|
34
|
+
an object with a `path` and a `digest`.
|
|
35
|
+
|
|
17
36
|
## What's new in 0.52.1
|
|
18
37
|
|
|
19
38
|
The workspace-status engine and MCP tool now route `shape` entries to
|
|
@@ -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.1 → agentbundle-0.53.1}/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
|
|
@@ -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
|
|
@@ -79,7 +79,7 @@ def _derive_name(basename: str) -> str | None:
|
|
|
79
79
|
cleaned = _UNSAFE_NAME_CHARS_RE.sub("-", basename.lower())
|
|
80
80
|
# Collapse multiple dashes, strip leading/trailing dashes
|
|
81
81
|
cleaned = re.sub(r"-{2,}", "-", cleaned).strip("-")
|
|
82
|
-
if _SAFE_NAME_RE.
|
|
82
|
+
if _SAFE_NAME_RE.fullmatch(cleaned):
|
|
83
83
|
return cleaned
|
|
84
84
|
return None
|
|
85
85
|
|
|
@@ -151,6 +151,43 @@ def generate_empty_marketplace(
|
|
|
151
151
|
return text.encode("utf-8")
|
|
152
152
|
|
|
153
153
|
|
|
154
|
+
_CLAUDE_SHIM = b"@AGENTS.md\n"
|
|
155
|
+
|
|
156
|
+
# Root files init keeps when the author already has their own copy.
|
|
157
|
+
_KEEP_EXISTING_PATHS: frozenset[str] = frozenset({"AGENTS.md", "CLAUDE.md"})
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def generate_root_agents_md(name: str) -> bytes:
|
|
161
|
+
"""Pure function. Return UTF-8 bytes for the catalogue's root ``AGENTS.md``.
|
|
162
|
+
|
|
163
|
+
Only the validated catalogue *name* is interpolated, so no free-text flag
|
|
164
|
+
reaches Markdown. Deterministic, final newline.
|
|
165
|
+
"""
|
|
166
|
+
standards = "guides/_shared/reference/catalogue-authoring-standards.md"
|
|
167
|
+
package_cmd = (
|
|
168
|
+
"agentbundle catalogue package --root . --bundle <bundle> "
|
|
169
|
+
"--release <version> --channel <channel> --output dist/"
|
|
170
|
+
)
|
|
171
|
+
text = (
|
|
172
|
+
f"# {name} catalogue\n\n"
|
|
173
|
+
"This is an AgentBundle catalogue. Packs live in `packs/` and profiles live in\n"
|
|
174
|
+
"`profiles/`. Directories that start with `_` are templates: discovery, builds\n"
|
|
175
|
+
"and packaging skip them.\n\n"
|
|
176
|
+
"Read these next:\n\n"
|
|
177
|
+
"- [`packs/AGENTS.md`](packs/AGENTS.md)\n"
|
|
178
|
+
"- [`profiles/AGENTS.md`](profiles/AGENTS.md)\n"
|
|
179
|
+
f"- [`{standards}`]({standards})\n\n"
|
|
180
|
+
"```bash\n"
|
|
181
|
+
"agentbundle catalogue verify --root .\n"
|
|
182
|
+
"agentbundle catalogue lint --root .\n"
|
|
183
|
+
f"{package_cmd}\n"
|
|
184
|
+
"```\n\n"
|
|
185
|
+
"`catalogue package` ships this file at the archive root as the "
|
|
186
|
+
"installable-catalogue marker, so keep it.\n"
|
|
187
|
+
)
|
|
188
|
+
return text.encode("utf-8")
|
|
189
|
+
|
|
190
|
+
|
|
154
191
|
# ---------------------------------------------------------------------------
|
|
155
192
|
# Metadata resolution
|
|
156
193
|
# ---------------------------------------------------------------------------
|
|
@@ -182,7 +219,7 @@ def resolve_metadata(
|
|
|
182
219
|
# --- name ---
|
|
183
220
|
resolved_name: str
|
|
184
221
|
if name:
|
|
185
|
-
if not _SAFE_NAME_RE.
|
|
222
|
+
if not _SAFE_NAME_RE.fullmatch(name):
|
|
186
223
|
errors.append(
|
|
187
224
|
f"--name {name!r} is not a valid catalogue name. "
|
|
188
225
|
"Use only letters, digits, hyphens, and underscores, "
|
|
@@ -312,6 +349,17 @@ def _build_plan(
|
|
|
312
349
|
content=marketplace_bytes,
|
|
313
350
|
))
|
|
314
351
|
|
|
352
|
+
planned.append(PlannedFile(
|
|
353
|
+
rel_path="AGENTS.md",
|
|
354
|
+
kind="generated",
|
|
355
|
+
content=generate_root_agents_md(meta.name),
|
|
356
|
+
))
|
|
357
|
+
planned.append(PlannedFile(
|
|
358
|
+
rel_path="CLAUDE.md",
|
|
359
|
+
kind="generated",
|
|
360
|
+
content=_CLAUDE_SHIM,
|
|
361
|
+
))
|
|
362
|
+
|
|
315
363
|
# Scaffold files in manifest order (already sorted)
|
|
316
364
|
for rel, content in sorted(scaffold_files.items()):
|
|
317
365
|
planned.append(PlannedFile(rel_path=rel, kind="scaffold", content=content))
|
|
@@ -380,6 +428,7 @@ def classify_conflicts(
|
|
|
380
428
|
existing = target / pf.rel_path
|
|
381
429
|
action: FileAction
|
|
382
430
|
conflict_reason: str | None = None
|
|
431
|
+
plan_sha256 = _sha256_bytes(pf.content)
|
|
383
432
|
|
|
384
433
|
if existing.is_symlink():
|
|
385
434
|
action = FileAction.CONFLICT
|
|
@@ -403,6 +452,10 @@ def classify_conflicts(
|
|
|
403
452
|
else:
|
|
404
453
|
if current_content == pf.content:
|
|
405
454
|
action = FileAction.ALREADY_PRESENT
|
|
455
|
+
elif pf.rel_path in _KEEP_EXISTING_PATHS:
|
|
456
|
+
# Author's own root guidance file: keep it, report its hash.
|
|
457
|
+
action = FileAction.ALREADY_PRESENT
|
|
458
|
+
plan_sha256 = _sha256_bytes(current_content)
|
|
406
459
|
else:
|
|
407
460
|
action = FileAction.CONFLICT
|
|
408
461
|
if pf.rel_path == "catalogue.toml":
|
|
@@ -423,7 +476,7 @@ def classify_conflicts(
|
|
|
423
476
|
path=pf.rel_path,
|
|
424
477
|
kind=pf.kind,
|
|
425
478
|
action=action,
|
|
426
|
-
sha256=
|
|
479
|
+
sha256=plan_sha256,
|
|
427
480
|
conflict_reason=conflict_reason,
|
|
428
481
|
))
|
|
429
482
|
|