agentbundle 0.43.1__tar.gz → 0.44.2__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.43.1/agentbundle.egg-info → agentbundle-0.44.2}/PKG-INFO +29 -1
- {agentbundle-0.43.1 → agentbundle-0.44.2}/README-pypi.md +28 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/manifest.json +1 -0
- agentbundle-0.44.2/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_layout_declared_section.py +236 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/pack.schema.json +4 -2
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/workspace_status_engine.py +141 -8
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/initialise_self_hosted.py +87 -1
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/lint.py +57 -24
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/install.py +322 -116
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/version.py +1 -1
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/workspace_mcp.py +35 -7
- {agentbundle-0.43.1 → agentbundle-0.44.2/agentbundle.egg-info}/PKG-INFO +29 -1
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle.egg-info/SOURCES.txt +4 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/pyproject.toml +1 -1
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_self_host_check.py +4 -2
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/cognitive-load-hosts.json +6 -9
- agentbundle-0.44.2/tests/integration/test_install_layout_is_best_effort.py +127 -0
- agentbundle-0.44.2/tests/unit/test_append_layout_section.py +616 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_file_safety.py +4 -4
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_self_hosted_init.py +206 -0
- agentbundle-0.44.2/tests/unit/test_cognitive_load_seed_contract.py +255 -0
- agentbundle-0.44.2/tests/unit/test_layout_bases_anchoring.py +138 -0
- agentbundle-0.44.2/tests/unit/test_pack_layout_section_schema.py +94 -0
- agentbundle-0.43.1/tests/unit/test_append_layout_section.py +0 -238
- agentbundle-0.43.1/tests/unit/test_cognitive_load_seed_contract.py +0 -129
- {agentbundle-0.43.1 → agentbundle-0.44.2}/MANIFEST.in +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/README.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/__main__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/adapter.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/adapter.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/agent-plugin-extension-namespaces.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/agent-plugin-extension-namespaces.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-index.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/packs/CLAUDE.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/evals/eval_queries.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/profiles/CLAUDE.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_gemini_admissibility.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_shared_library_boundaries.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/close_work.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/cooling.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/distribution-routes.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/distribution-routes.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/file_safety.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/guide.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/install-marker.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/knowledge-captured-observation.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/marketplace-entry.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/plugin-manifest.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/profile.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/public-contracts.txt +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/skill-manifest.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/skill.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/target-vocab.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/vendor/agent-plugins/1.0.0/LICENSE.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/vendor/agent-plugins/1.0.0/PROVENANCE.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/vendor/agent-plugins/1.0.0/mcp.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/vendor/agent-plugins/1.0.0/plugin.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/work_intake_refresh.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/bounded_metadata.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/__main__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapter_root_bins.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapters/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapters/_sweep_guard.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapters/claude_code.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapters/codex.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapters/copilot.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapters/cursor.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapters/gemini.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapters/kiro.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapters/kiro_cli.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/adapters/kiro_ide.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/contract.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/hook_wiring_rules.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/lint_packs.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/main.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/phase_order.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projection_io.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/codex_agent_toml.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/copilot_agent_md.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/direct_directory.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/gemini_command_toml.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/hook_id.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/merge_json.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/plugin_hooks.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/projections/user_merge_json.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/recipes/marketplace.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/recipes/per-pack-agent-plugin.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/recipes/self-host.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/route_agent_plugin.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/route_apm.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/route_claude_plugins.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/route_lookup.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/scope_rails.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/self_host.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/shared_libs.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/target_resolver.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/user_libs.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/build/validate.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/archive.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/build.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/config.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/contracts_inspector.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/defaults.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/file_safety.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/identity.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/index_generator.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/initialise.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/journey_validator.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/manifest.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/okf_discovery.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/package.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/results.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/self_host.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/verify.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/version_ranges.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/categories.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/cli.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/_common.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/_drop_warning.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/adapt.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/catalogue_build.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/catalogue_contracts.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/catalogue_index.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/catalogue_init.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/catalogue_lint.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/catalogue_package.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/catalogue_self_host.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/catalogue_verify.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/config.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/diff.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/docs.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/init_state.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/list_installed.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/list_packs.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/list_profiles.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/list_targets.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/oplog_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/pack_config_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/pack_evals.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/package_catalogue.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/profile.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/reconcile.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/render.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/scaffold.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/show.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/uninstall.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/upgrade.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/commands/validate.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/config.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/direct_install.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/direct_source.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/direct_source_acquisition.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/direct_source_state.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/direct_validate.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/https_catalogue.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/local_exclude.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/oplog.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/pack_inventory.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/render.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/safety.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/scaffold.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/scope.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/source_defaults.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/statelock.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/system_trust.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/user_config.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle.egg-info/dependency_links.txt +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle.egg-info/entry_points.txt +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle.egg-info/requires.txt +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle.egg-info/top_level.txt +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/conftest.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/setup.cfg +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/templates/install-marker.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/_direct_acquisition.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/_support.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/README.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/claude-code-2.1.226-hook-events.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/claude-code-2.1.228-hook-events.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/core/.apm/agents/bar.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/core/.apm/commands/qux.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/baz.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/qux.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/core/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/core/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/governance-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/governance-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/governance-extras/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/monorepo-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/monorepo-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/monorepo-extras/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/product-documentation/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/product-documentation/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/product-documentation/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/fixtures/recipes/bogus-target.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_adapter_claude_code.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_adapter_codex.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_adapter_copilot.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_adapter_cursor.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_adapter_gemini.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_adapter_kiro.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_adapter_kiro_alias.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_adapter_kiro_cli.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_adapter_kiro_ide.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_adapter_root_bins_projection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_agent_boundary_metadata_projection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_agent_plugin_projection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_build_ships_seeds.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_contract.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_contract_scope.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_contract_v07.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_contract_v08.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_direct_directory_cleanup.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_distribution_route_contract.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_distribution_route_golden.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_distribution_route_resolution.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_end_to_end_build.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_hook_wiring_rules.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_lint_packs.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_load_pack_hook_wiring_safely.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_pack_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_pack_schema_allowed_adapters.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_pack_schema_install.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_pipeline.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_plugin_hooks.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_plugin_manifest_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_plugin_publication_gates.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_policy_registry_projection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_projectable_subset.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_projection_io.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_projections_merge_json.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_route_lookup.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_scope_rails.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_security.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_self_host_fixture_guard.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_self_host_metadata_policy.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_self_host_recipe_config.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_sequential_implementer_dispatch_projection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_shared_libs_projection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_shared_prefix_contract.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_user_libs_projection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_validate.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/build_pipeline/test_writers_emit_lf.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/conftest.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/contracts/test_agentbundle_show_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/contracts/test_skill_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/adapt/.adapt-discovery.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/adapt/values.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/catalogue.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/packs/.gitkeep +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/packs/_example/README.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/packs/_example/evals/eval_queries.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/packs/_example/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/profiles/.gitkeep +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/profiles/_example/README.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/blank_catalogue/profiles/_example/profile.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield/values.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt/AGENTS.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt/AGENTS.upstream.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt/DESIGN.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt/EXPECTED_TREE.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt/docs/CHARTER.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt/docs/guides/how-to/index.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt/docs/howto/getting-started.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt-expected/AGENTS.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt-expected/docs/CHARTER.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/.adapt-discovery.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/state.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/catalogue_wave4/catalogue.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/hook-wiring/example.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/.apm/skills/example-skill/scripts/run.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/JOURNEY.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/catalogue_wave4/packs/pack-with-journey/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/catalogue_wave4/packs/pack-without-journey/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/catalogue_wave4/profiles/test-profile.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/argv-flag/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/argv-flag/scripts/cli.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/argv-flag-derived/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/argv-flag-derived/scripts/cli.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/argv-flag-normalised/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/argv-flag-normalised/scripts/cli.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/conforming/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/conforming/scripts/cli.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/dotfile-grep/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/dotfile-grep/scripts/leak.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/dotfile-with-optout/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/dotfile-with-optout/scripts/legit.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/mcp-server-headers/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/mcp-server-headers/scripts/cli.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/creds/skills/missing-dont-block/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/direct/ac35_corpus_verdicts.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/direct/golden_state_0_5.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/distribution-routes/golden.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/distribution-routes/witness-packs/portable/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/distribution-routes/witness-packs/portable/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/AGENTS.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/LICENSE-APACHE +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/LICENSE-MIT +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/catalogue.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/packs/alpha/seeds/AGENTS.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/packs/beta/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/external_catalogue/profiles/example.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/install/catalogue/packs/alpha/.apm/agents/helper.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/install/catalogue/packs/alpha/.apm/commands/cmd.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/install/catalogue/packs/alpha/.apm/hook-wiring/run.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/install/catalogue/packs/alpha/.apm/hooks/run.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/install/catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/install/catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/install/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/kiro_ide_hook/ask_agent_basic.kiro.hook +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/kiro_ide_hook/run_command_with_placeholder.kiro.hook +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/lint_packs/clean/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/lint_packs/clean/seeds/README.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/list-installed/golden_120col.txt +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/list-installed/golden_80col.txt +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/list_packs/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/list_packs/catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/.apm/skills/local-test/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/cc-user-hooks/.apm/hook-wiring/on-prompt.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/cc-user-hooks/.apm/hooks/on-prompt.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/cc-user-hooks/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/kiro-repo-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/kiro-repo-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/kiro-repo-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/kiro-repo-hooks/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/kiro-user-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/kiro-user-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/kiro-user-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/kiro-user-hooks/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-missing-attach/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-pascal-events/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/packs/malformed-kiro-unknown-agent/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/scaffold/test-pack/seeds/AGENTS.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/scaffold/test-pack/seeds/_agents-footer.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/scaffold/test-pack/seeds/docs/CHARTER.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/show_contract/agentbundle-show.schema.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/show_contract/catalogue.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/show_contract/installed_state.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/validate/bad_recipe_pack/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/validate/malformed_pack/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/validate/valid_pack/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/fixtures/validate/version_mismatch_pack/pack.toml +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_adapt_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_adapt_dual_scope.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_adapt_preflight_detection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_adapt_schema_migration.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_apm_install_route.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_blank_catalogue.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_brownfield_adapt_end_to_end.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_brownfield_round_trip.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_brownfield_user_home_fixture.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_build_check_drift_gates.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_build_derivation_apm.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_build_derivation_claude_plugins.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_init.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_verify_adapter_compat.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_verify_dependencies.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_verify_external_portability.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_verify_fixture_checks.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_verify_marketplace.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_verify_output_drift.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_verify_package_preflight.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_verify_plugin_path.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_verify_profile_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_verify_step1.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_wave4_index_generator.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_wave4_integration.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_wave4_journey_validator.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_catalogue_wave4_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_cc_user_hooks_fixture.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_claude_plugins_install_route.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_config_cascade.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_credential_brokers_pack_install.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_credentials_wheel.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_direct_install.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_discovery_schema_cross_consumer.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_editable_source_detection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_fixtures_validate.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_hook_wiring_ingress.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_adapt_chain.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_converters_user_scope.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_copilot_full_parity.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_core_smoke.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_default_source.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_dependencies_gate.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_dual_scope.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_orphan_reshape.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_pack_metadata_shape.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_profile.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_profile_live.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_repo_scope_per_adapter.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_research_user_scope.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_seed_delivery.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_session_start_wiring.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_upgrade_offer.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_user_hooks.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_install_user_scope_allowed_adapters.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_kiro_ide_hook_e2e.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_kiro_repo_hooks_fixture.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_kiro_user_hooks_fixture.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_list_packs_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_local_scope_install.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_marketplace_entry_validation.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_marketplace_manifest_regression.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_multi_pack_install.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_orphan_cleanup_respects_foreign_state.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_plugin_route_membership.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_recommends_cross_scope.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_reconcile.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_reserved_path_filter.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_scaffold_projection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_self_host_schema_migration.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_self_host_sweep_respects_state.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_shared_prefix_coexistence.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_show_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_tier_invariants.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_trust_fallback_tls.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_uninstall_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_uninstall_user_hooks.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_upgrade_attach_to_agent.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_upgrade_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_upgrade_user_hooks.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_version_gate_matrix.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_workspace_mcp_git_fsm.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/integration/test_zipapp.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/performance/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/performance/test_direct_family2_budget_cost.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/test_adapter_permissions_projection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/test_workspace_mcp_elicit.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/test_workspace_mcp_event_bridge.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/test_workspace_mcp_git.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/test_workspace_mcp_lifecycle.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/test_workspace_mcp_stdin.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/test_workspace_mcp_tools.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/__init__.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_adapt_discovery_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_adapter_symlink_policy.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_architect_readme_install_command.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_ci_contract.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_curation_deps.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_init_cli_self_hosted.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_pack_defaults.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_self_hosted_export_removal.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_skill_spec_lint.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_archive.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_build.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_defaults.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_foundation.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_identity.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_init.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_lint.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_package.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_self_host.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_source_package.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_tooling_verify.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_trust_fallback.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_wave2_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_wave2_validation.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_wave3_contracts_cli.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_wave3_contracts_inspector.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_wave3_init_nextsteps.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_catalogue_wave3_offline_navigation.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_cli_catalogue_optional.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_cli_help_lists_config.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_cli_list_targets_help.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_cli_path_normalisation.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_cli_profile_surface.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_cli_scope_flags.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_codex_agent_toml.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_codex_projection_modes.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_collect_tree_symlinks.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_common_classify_seeds.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_config.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_config_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_configured_adapter.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_confirm_helper.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_contract_parity.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_contract_v0_3_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_copilot_agent_md.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_copilot_hooks_json.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_copilot_user_scope_wiring.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_credbroker_lint_hardening.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_dependencies_batch.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_diff_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_direct_admission.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_direct_architecture_controls.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_direct_diagnostics.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_direct_lifecycle_facts.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_direct_source_acquisition.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_direct_source_state.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_direct_upgrade.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_direct_validate.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_footprint_ownership.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_https_catalogue.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_init_state_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_argparse_adapter_flag.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_argparse_emit_install_routes.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_defaults_preferred_adapter.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_event_dropped_wirings.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_first_value_handoff.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_force_help.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_inband_detection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_messages.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_messages_repo_scope.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_refusal_ordering.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_install_state_provenance.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_kiro_ide_hook_projection.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_kiro_ide_hook_rail.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_kiro_ide_hook_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_lint_agent_artifacts_metadata_auth.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_list_installed_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_list_installed_status.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_list_targets_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_exclude_git_cache.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_scope_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_scope_t10_uninstall.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_scope_t12_show.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_scope_t2_resolve.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_scope_t3_config.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_scope_t4_state_path.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_scope_t5_list_installed.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_scope_t7_install_gates.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_scope_t8_install.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_local_scope_t9_exclude.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_marker_schema_version_parity.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_merge_into_agent_json.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_multi_adapter_disambiguator.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_nested_symlink_hardening.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_okf_discovery.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_org_bootstrap.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_orphan_sweep_guards.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_pack_config_api.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_pack_inventory.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_package_catalogue.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_packstate_source_provenance.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_pipeline_phase_order.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_plugin_scope_filter.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_profile_reader.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_render.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_render_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_render_table.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_resolve_state_path.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_resolve_target_adapter_user_config.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_resolve_user_scope_target_adapter.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_route_surface_parity.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_safety.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_safety_repo_scope_prefixes.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_safety_scan_per_pack_scoping.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_scaffold_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_scope.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_self_host_windows.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_shared_prefix_disclosure.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_source_conflict_guard.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_source_defaults.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_state_v01_refuse_write.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_state_v02.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_state_v0_4_schema.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_statelock.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_statelock_hardening.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_system_trust.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_target_resolver.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_toml_emitters.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_unresolved_markers.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_upgrade_bulk_all.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_upgrade_recap.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_upgrade_source_inference.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_user_config_io.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_user_config_isolation.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_user_config_path.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_user_config_source.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_user_merge_json.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_validate_attach_to_agent.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_validate_categories.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_validate_cmd.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_validate_hook_wiring_per_file_compatibility.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_values_from_shapes.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_version.py +0 -0
- {agentbundle-0.43.1 → agentbundle-0.44.2}/tests/unit/test_windows_direct_suite_registration.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentbundle
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.44.2
|
|
4
4
|
Summary: npm for your coding agent. Install packs of skills, subagents, and hooks into any repo, for every major agent.
|
|
5
5
|
Author-email: eugenelim <eugenelim@users.noreply.github.com>
|
|
6
6
|
License-Expression: Apache-2.0 OR MIT
|
|
@@ -34,6 +34,34 @@ python -m pip install agentbundle
|
|
|
34
34
|
|
|
35
35
|
Requires Python 3.11+. Runs on macOS, Linux, and Windows.
|
|
36
36
|
|
|
37
|
+
## What's new in 0.44.2
|
|
38
|
+
|
|
39
|
+
A catalogue you derive with `catalogue init --preset self-hosted` now keeps a
|
|
40
|
+
working drift check on its vendored `credbroker` code. Selecting the
|
|
41
|
+
`credential-brokers` pack copies the package source alongside it, so the check
|
|
42
|
+
that compares the vendored copy against that source has something to compare.
|
|
43
|
+
Previously the source was left behind and the check passed by finding nothing:
|
|
44
|
+
the vendored copy was frozen, and an edit to it went unreported.
|
|
45
|
+
|
|
46
|
+
`--attribution white-label` also no longer records the upstream catalogue's
|
|
47
|
+
name in `.agentbundle/self-host-state.json`. That file is written after the
|
|
48
|
+
identity scan runs, so the name reached a file you commit and ship. It now
|
|
49
|
+
records your own catalogue's name. `--attribution attributed` is unchanged and
|
|
50
|
+
still records the upstream name.
|
|
51
|
+
|
|
52
|
+
## What's new in 0.44.1
|
|
53
|
+
|
|
54
|
+
Installing a pack now adds its default output location to an
|
|
55
|
+
`agentbundle-layout.toml` you already keep. That step has existed for several
|
|
56
|
+
releases and never wrote anything: it looked for a manifest key no pack
|
|
57
|
+
declares, and named the table after the pack while every skill reads a
|
|
58
|
+
differently-named section. A pack now declares the section it writes.
|
|
59
|
+
|
|
60
|
+
The append also stops rewriting your file. It adds one table and leaves every
|
|
61
|
+
other byte alone — comments, key order, quoting style, line endings, and any
|
|
62
|
+
key it does not recognise — and the file keeps its permissions. A layout
|
|
63
|
+
problem is reported and the install finishes; it no longer aborts.
|
|
64
|
+
|
|
37
65
|
## What's new in 0.43.1
|
|
38
66
|
|
|
39
67
|
`agentbundle catalogue init` now writes `packs/CLAUDE.md` and
|
|
@@ -14,6 +14,34 @@ 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.44.2
|
|
18
|
+
|
|
19
|
+
A catalogue you derive with `catalogue init --preset self-hosted` now keeps a
|
|
20
|
+
working drift check on its vendored `credbroker` code. Selecting the
|
|
21
|
+
`credential-brokers` pack copies the package source alongside it, so the check
|
|
22
|
+
that compares the vendored copy against that source has something to compare.
|
|
23
|
+
Previously the source was left behind and the check passed by finding nothing:
|
|
24
|
+
the vendored copy was frozen, and an edit to it went unreported.
|
|
25
|
+
|
|
26
|
+
`--attribution white-label` also no longer records the upstream catalogue's
|
|
27
|
+
name in `.agentbundle/self-host-state.json`. That file is written after the
|
|
28
|
+
identity scan runs, so the name reached a file you commit and ship. It now
|
|
29
|
+
records your own catalogue's name. `--attribution attributed` is unchanged and
|
|
30
|
+
still records the upstream name.
|
|
31
|
+
|
|
32
|
+
## What's new in 0.44.1
|
|
33
|
+
|
|
34
|
+
Installing a pack now adds its default output location to an
|
|
35
|
+
`agentbundle-layout.toml` you already keep. That step has existed for several
|
|
36
|
+
releases and never wrote anything: it looked for a manifest key no pack
|
|
37
|
+
declares, and named the table after the pack while every skill reads a
|
|
38
|
+
differently-named section. A pack now declares the section it writes.
|
|
39
|
+
|
|
40
|
+
The append also stops rewriting your file. It adds one table and leaves every
|
|
41
|
+
other byte alone — comments, key order, quoting style, line endings, and any
|
|
42
|
+
key it does not recognise — and the file keeps its permissions. A layout
|
|
43
|
+
problem is reported and the install finishes; it no longer aborts.
|
|
44
|
+
|
|
17
45
|
## What's new in 0.43.1
|
|
18
46
|
|
|
19
47
|
`agentbundle catalogue init` now writes `packs/CLAUDE.md` and
|
{agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/_data/catalogue-scaffold/manifest.json
RENAMED
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
"profiles/_example/README.md": "164494df049ddce3e57cb44ed604cb3d39be0a6ec2072e609ea3fa4bbfc74c72",
|
|
17
17
|
"profiles/_example/profile.toml": "68af18cf50fa0327a9776b029c92bb1cf82710c649691b3ac889eb8537b8eac7",
|
|
18
18
|
"tests/conformance/test_gemini_admissibility.py": "8b337da9272823aed2cb22041b3f9fd27549f075f28b9817efd5be8f8c5bb948",
|
|
19
|
+
"tests/conformance/test_pack_layout_declared_section.py": "1e03e04b995bd3f3cd2e6362c07d05514d3fe995c0fbe59045e3cc11a1e787a0",
|
|
19
20
|
"tests/conformance/test_pack_metadata.py": "8ea175b88cc6e10ba10cda87676fc225ee2b968d710c8e6ab05fb20e31ec978a",
|
|
20
21
|
"tests/conformance/test_shared_library_boundaries.py": "5e07783459336e657a355f43aa5a9cf6c138603624daec258ecc0fa3d74239c3"
|
|
21
22
|
},
|
|
@@ -0,0 +1,236 @@
|
|
|
1
|
+
"""A pack's declared layout section must be one it documents (spec AC6).
|
|
2
|
+
|
|
3
|
+
`agentbundle install` appends `[<section>] output_dir = <output_dir>` to an
|
|
4
|
+
adopter's `agentbundle-layout.toml`, taking both values from the pack manifest.
|
|
5
|
+
Every consuming skill then reads that section by prose instruction in its own
|
|
6
|
+
`SKILL.md` — no skill calls Python, so nothing at runtime can reconcile a
|
|
7
|
+
manifest that names a section the pack's own documentation does not.
|
|
8
|
+
|
|
9
|
+
That is exactly how the original defect survived two releases: the writer and
|
|
10
|
+
the readers were each exercised against their own idea of the shape. So this
|
|
11
|
+
check derives **both** sides from the repository and compares them. It carries
|
|
12
|
+
no list of expected section names; a list is the hand-maintained table the
|
|
13
|
+
design rejects.
|
|
14
|
+
|
|
15
|
+
Matching the *pair* rather than the section alone is what makes the check
|
|
16
|
+
discriminate. A pack may legitimately document several sections: one per
|
|
17
|
+
output tree it owns, plus any it only *reads* from a sibling pack. Section
|
|
18
|
+
membership alone would then admit a declaration that crosses two of them — a
|
|
19
|
+
section from one documented pair carried on the base from another — which
|
|
20
|
+
installs a default under a section whose readers resolve somewhere else. No
|
|
21
|
+
document describes that combination, and the pair rule is what rejects it.
|
|
22
|
+
|
|
23
|
+
This file is pack-portable by rule: it derives every pack and every pair from
|
|
24
|
+
the tree rather than naming any. It also ships — `catalogue init` writes it
|
|
25
|
+
into an adopter's catalogue, which may hold no packs, or packs that declare no
|
|
26
|
+
layout — so every tree-derived case skips when its evidence is absent, and the
|
|
27
|
+
rule's own discrimination is proven against synthetic input that is always
|
|
28
|
+
present and can never be vacuous.
|
|
29
|
+
|
|
30
|
+
That the *source* catalogue actually supplies that evidence is a claim about
|
|
31
|
+
this repository, not about every catalogue, so it lives in `tests/roster/`,
|
|
32
|
+
which does not ship. Without it a mis-rooted glob here would skip rather than
|
|
33
|
+
fail.
|
|
34
|
+
"""
|
|
35
|
+
|
|
36
|
+
from __future__ import annotations
|
|
37
|
+
|
|
38
|
+
import re
|
|
39
|
+
import tomllib
|
|
40
|
+
from pathlib import Path
|
|
41
|
+
|
|
42
|
+
import pytest
|
|
43
|
+
|
|
44
|
+
REPO_ROOT = Path(__file__).resolve().parents[2]
|
|
45
|
+
PACKS_DIR = REPO_ROOT / "packs"
|
|
46
|
+
|
|
47
|
+
# `[section]` immediately followed by an `output_dir = "..."` assignment, inside
|
|
48
|
+
# one fenced block. Intervening comment lines are allowed; a blank line is not,
|
|
49
|
+
# so two unrelated examples cannot be read as one pair.
|
|
50
|
+
_PAIR = re.compile(
|
|
51
|
+
r"^\[([a-z0-9][a-z0-9-]*)\]\n(?:#[^\n]*\n)*output_dir = \"([^\"]+)\"",
|
|
52
|
+
re.MULTILINE,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def _declaring_packs() -> list[tuple[str, str, str, str]]:
|
|
57
|
+
"""(pack, scope, section, output_dir) for every declared layout scope.
|
|
58
|
+
|
|
59
|
+
Both scopes, because the installer honours `[pack.layout.user]` too. No
|
|
60
|
+
shipped pack declares one today, but this file ships into adopter
|
|
61
|
+
catalogues where one could — and a user-scope pair no document describes
|
|
62
|
+
would otherwise pass unseen.
|
|
63
|
+
"""
|
|
64
|
+
found = []
|
|
65
|
+
for manifest in sorted(PACKS_DIR.glob("*/pack.toml")):
|
|
66
|
+
layout = (
|
|
67
|
+
tomllib.loads(manifest.read_text(encoding="utf-8"))
|
|
68
|
+
.get("pack", {})
|
|
69
|
+
.get("layout", {})
|
|
70
|
+
)
|
|
71
|
+
for scope in ("repo", "user"):
|
|
72
|
+
table = layout.get(scope)
|
|
73
|
+
if not table:
|
|
74
|
+
continue
|
|
75
|
+
section, output_dir = table.get("section"), table.get("output_dir")
|
|
76
|
+
if section is None and output_dir is None:
|
|
77
|
+
continue
|
|
78
|
+
found.append((manifest.parent.name, scope, section, output_dir))
|
|
79
|
+
return found
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _is_repo_scope_base(base: str) -> bool:
|
|
83
|
+
"""A repo-scope base is relative; a user-scope base is absolute.
|
|
84
|
+
|
|
85
|
+
This is the anchoring rule the layout contract already states — a
|
|
86
|
+
repo-root file's value is repo-root-relative, a user-profile file's must
|
|
87
|
+
be an explicit absolute path. Reading scope off the value keeps the check
|
|
88
|
+
from depending on how a fenced example is commented.
|
|
89
|
+
"""
|
|
90
|
+
return not base.startswith(("/", "~"))
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
def _documented_pairs(pack: str, *, repo_scope: bool = True) -> set[tuple[str, str]]:
|
|
94
|
+
"""Every (section, base) pair this pack's docs state for one scope.
|
|
95
|
+
|
|
96
|
+
Scope matters: a pack's reference docs carry both a repo-scope and a
|
|
97
|
+
user-scope example for the same section, so unioning them would let a
|
|
98
|
+
repo-scope declaration be validated by the user-scope base — a pair no
|
|
99
|
+
reader of the repo file would ever resolve.
|
|
100
|
+
"""
|
|
101
|
+
pairs: set[tuple[str, str]] = set()
|
|
102
|
+
for doc in (PACKS_DIR / pack).rglob("references/agentbundle-layout.md"):
|
|
103
|
+
pairs |= {
|
|
104
|
+
(section, base)
|
|
105
|
+
for section, base in _PAIR.findall(doc.read_text(encoding="utf-8"))
|
|
106
|
+
if _is_repo_scope_base(base) is repo_scope
|
|
107
|
+
}
|
|
108
|
+
return pairs
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
def _is_admitted(
|
|
112
|
+
section: str, output_dir: str, documented: set[tuple[str, str]]
|
|
113
|
+
) -> bool:
|
|
114
|
+
"""The admission decision, in one place.
|
|
115
|
+
|
|
116
|
+
Both the tree-derived case and the discrimination proof call this, so a
|
|
117
|
+
weakening — to section membership alone, say — fails the proof instead of
|
|
118
|
+
passing it.
|
|
119
|
+
"""
|
|
120
|
+
return (section, output_dir) in documented
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def test_the_admission_rule_rejects_a_crossed_declaration() -> None:
|
|
124
|
+
"""A section from one documented pair, carried on another's base.
|
|
125
|
+
|
|
126
|
+
Asserted through `_is_admitted`, the same predicate the tree-derived case
|
|
127
|
+
uses. Weakening that predicate to section membership admits the crossing
|
|
128
|
+
and turns this red.
|
|
129
|
+
"""
|
|
130
|
+
documented = {("alpha", "one/alpha"), ("beta", "two/beta")}
|
|
131
|
+
|
|
132
|
+
assert _is_admitted("alpha", "one/alpha", documented)
|
|
133
|
+
assert _is_admitted("beta", "two/beta", documented)
|
|
134
|
+
assert not _is_admitted("alpha", "two/beta", documented)
|
|
135
|
+
assert not _is_admitted("beta", "one/alpha", documented)
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
@pytest.mark.parametrize("pack,scope,section,output_dir", _declaring_packs())
|
|
139
|
+
def test_declared_pair_is_documented_by_the_pack( # noqa: D103
|
|
140
|
+
pack: str, scope: str, section: str | None, output_dir: str | None
|
|
141
|
+
) -> None:
|
|
142
|
+
assert section, f"{pack} declares a {scope} layout without a section"
|
|
143
|
+
assert output_dir, f"{pack} declares a {scope} layout without an output_dir"
|
|
144
|
+
|
|
145
|
+
documented = _documented_pairs(pack, repo_scope=scope == "repo")
|
|
146
|
+
assert documented, f"{pack} declares a layout but documents no section"
|
|
147
|
+
assert _is_admitted(section, output_dir, documented), (
|
|
148
|
+
f"{pack} declares ({section!r}, {output_dir!r}); its reference docs "
|
|
149
|
+
f"document {sorted(documented)}. The installer writes the declared "
|
|
150
|
+
f"pair, so a pair no document describes installs a default the pack's "
|
|
151
|
+
f"own skills will not read."
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def _crossed_pairs(pairs: set[tuple[str, str]]) -> set[tuple[str, str]]:
|
|
156
|
+
"""Every (section, base) formed from two *different* documented pairs."""
|
|
157
|
+
return {
|
|
158
|
+
(one_section, other_base)
|
|
159
|
+
for one_section, one_base in pairs
|
|
160
|
+
for other_section, other_base in pairs
|
|
161
|
+
if one_section != other_section and one_base != other_base
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
def test_the_rule_rejects_a_crossed_pair() -> None:
|
|
166
|
+
"""The rule must discriminate, proven without depending on the tree.
|
|
167
|
+
|
|
168
|
+
Section membership alone would admit a declaration that takes its section
|
|
169
|
+
from one documented pair and its base from another. This is the property
|
|
170
|
+
that makes the pair rule worth having, so it is asserted against synthetic
|
|
171
|
+
input rather than against whichever packs happen to document two pairs
|
|
172
|
+
today — on an empty catalogue that evidence would simply be absent, and
|
|
173
|
+
the guarantee would silently stop being checked.
|
|
174
|
+
"""
|
|
175
|
+
documented = {("alpha", "one/alpha"), ("beta", "two/beta")}
|
|
176
|
+
crossed = _crossed_pairs(documented)
|
|
177
|
+
|
|
178
|
+
assert crossed == {("alpha", "two/beta"), ("beta", "one/alpha")}
|
|
179
|
+
assert not (crossed & documented), "a crossed pair must never be documented"
|
|
180
|
+
|
|
181
|
+
|
|
182
|
+
def test_a_repo_declaration_is_not_validated_by_a_user_scope_example() -> None:
|
|
183
|
+
"""The scope split must discriminate, not merely pass on today's tree.
|
|
184
|
+
|
|
185
|
+
A pack documenting the same section at both scopes offers two bases. If
|
|
186
|
+
the check unioned them, a repo-scope manifest carrying the user-scope base
|
|
187
|
+
would pass while naming a path no reader of the repo file resolves.
|
|
188
|
+
"""
|
|
189
|
+
checked = 0
|
|
190
|
+
for pack, _scope, _section, _base in _declaring_packs():
|
|
191
|
+
repo_pairs = _documented_pairs(pack, repo_scope=True)
|
|
192
|
+
user_pairs = _documented_pairs(pack, repo_scope=False)
|
|
193
|
+
for section, user_base in user_pairs:
|
|
194
|
+
if any(s == section for s, _ in repo_pairs):
|
|
195
|
+
assert (section, user_base) not in repo_pairs
|
|
196
|
+
checked += 1
|
|
197
|
+
if not checked:
|
|
198
|
+
pytest.skip("no pack here documents one section at both scopes")
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
def test_no_pack_documents_a_crossing_of_its_own_pairs() -> None:
|
|
202
|
+
"""The same property over the real tree, where there is one."""
|
|
203
|
+
for pack, _scope, _section, _base in _declaring_packs():
|
|
204
|
+
pairs = _documented_pairs(pack)
|
|
205
|
+
assert not (_crossed_pairs(pairs) & pairs), (
|
|
206
|
+
f"{pack} documents a pair and also a crossing of it, so the rule "
|
|
207
|
+
"cannot discriminate for that pack"
|
|
208
|
+
)
|
|
209
|
+
|
|
210
|
+
|
|
211
|
+
def test_every_reference_doc_agrees_with_its_pack_on_the_base() -> None:
|
|
212
|
+
"""AC6 admits a pair documented in *one* doc; this requires all of them.
|
|
213
|
+
|
|
214
|
+
A pack with several reference pages can otherwise regress one of them to a
|
|
215
|
+
base the installer does not write, and stay green — the adopter reading
|
|
216
|
+
that page gets a location nothing populates.
|
|
217
|
+
"""
|
|
218
|
+
walked = 0
|
|
219
|
+
for pack, scope, section, output_dir in _declaring_packs():
|
|
220
|
+
if scope != "repo":
|
|
221
|
+
continue
|
|
222
|
+
for doc in sorted((PACKS_DIR / pack).rglob("references/agentbundle-layout.md")):
|
|
223
|
+
pairs = {
|
|
224
|
+
(s, b)
|
|
225
|
+
for s, b in _PAIR.findall(doc.read_text(encoding="utf-8"))
|
|
226
|
+
if s == section and _is_repo_scope_base(b)
|
|
227
|
+
}
|
|
228
|
+
if not pairs:
|
|
229
|
+
continue # this page documents another section, or user scope
|
|
230
|
+
walked += 1
|
|
231
|
+
assert pairs == {(section, output_dir)}, (
|
|
232
|
+
f"{doc.relative_to(REPO_ROOT)} documents {sorted(pairs)} for "
|
|
233
|
+
f"[{section}] while {pack} declares {output_dir!r}"
|
|
234
|
+
)
|
|
235
|
+
if not walked:
|
|
236
|
+
pytest.skip("no reference doc here documents a declared repo-scope section")
|
|
@@ -248,7 +248,8 @@
|
|
|
248
248
|
"properties": {
|
|
249
249
|
"parent": {"type": "string"},
|
|
250
250
|
"template": {"type": "string"},
|
|
251
|
-
"output_dir": {"type": "string"}
|
|
251
|
+
"output_dir": {"type": "string"},
|
|
252
|
+
"section": {"type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$"}
|
|
252
253
|
}
|
|
253
254
|
},
|
|
254
255
|
"user": {
|
|
@@ -257,7 +258,8 @@
|
|
|
257
258
|
"properties": {
|
|
258
259
|
"parent": {"type": "string"},
|
|
259
260
|
"template": {"type": "string"},
|
|
260
|
-
"output_dir": {"type": "string"}
|
|
261
|
+
"output_dir": {"type": "string"},
|
|
262
|
+
"section": {"type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$"}
|
|
261
263
|
}
|
|
262
264
|
}
|
|
263
265
|
}
|
|
@@ -297,6 +297,16 @@ class LegacyWorkspaceMembership:
|
|
|
297
297
|
entry_index: int = 0
|
|
298
298
|
|
|
299
299
|
|
|
300
|
+
@dataclasses.dataclass(frozen=True)
|
|
301
|
+
class ParseBlockedWorkspaceMembership:
|
|
302
|
+
"""One target-like entry whose safe artifact identity survived parsing."""
|
|
303
|
+
|
|
304
|
+
canonical_artifact_path: str
|
|
305
|
+
ini_slug: str
|
|
306
|
+
collection: str
|
|
307
|
+
entry_index: int
|
|
308
|
+
|
|
309
|
+
|
|
300
310
|
@dataclasses.dataclass(frozen=True)
|
|
301
311
|
class MigrationSelection:
|
|
302
312
|
"""Closed human-selected binding from one legacy finding to one target."""
|
|
@@ -2481,12 +2491,12 @@ def _extract_canonical_memberships(
|
|
|
2481
2491
|
list[WorkspaceMembership],
|
|
2482
2492
|
list[LegacyWorkspaceMembership],
|
|
2483
2493
|
list[RoutingFinding],
|
|
2484
|
-
|
|
2494
|
+
list[ParseBlockedWorkspaceMembership],
|
|
2485
2495
|
]:
|
|
2486
2496
|
memberships: list[WorkspaceMembership] = []
|
|
2487
2497
|
legacy_memberships: list[LegacyWorkspaceMembership] = []
|
|
2488
2498
|
findings: list[RoutingFinding] = []
|
|
2489
|
-
|
|
2499
|
+
parse_blocked_memberships: list[ParseBlockedWorkspaceMembership] = []
|
|
2490
2500
|
for section_name, top_level_names in _TOP_LEVEL_ENTRY_COLLECTIONS.items():
|
|
2491
2501
|
section = workspace.get(section_name, {})
|
|
2492
2502
|
if not isinstance(section, dict):
|
|
@@ -2514,8 +2524,13 @@ def _extract_canonical_memberships(
|
|
|
2514
2524
|
dataclasses.replace(legacy_membership, entry_index=entry_index)
|
|
2515
2525
|
)
|
|
2516
2526
|
if blocked_path is not None:
|
|
2517
|
-
|
|
2518
|
-
|
|
2527
|
+
parse_blocked_memberships.append(
|
|
2528
|
+
ParseBlockedWorkspaceMembership(
|
|
2529
|
+
canonical_artifact_path=blocked_path,
|
|
2530
|
+
ini_slug="",
|
|
2531
|
+
collection=collection,
|
|
2532
|
+
entry_index=entry_index,
|
|
2533
|
+
)
|
|
2519
2534
|
)
|
|
2520
2535
|
findings.extend(entry_findings)
|
|
2521
2536
|
for raw_ini_slug, section in workspace.items():
|
|
@@ -2569,11 +2584,16 @@ def _extract_canonical_memberships(
|
|
|
2569
2584
|
dataclasses.replace(legacy_membership, entry_index=entry_index)
|
|
2570
2585
|
)
|
|
2571
2586
|
if blocked_path is not None:
|
|
2572
|
-
|
|
2573
|
-
|
|
2587
|
+
parse_blocked_memberships.append(
|
|
2588
|
+
ParseBlockedWorkspaceMembership(
|
|
2589
|
+
canonical_artifact_path=blocked_path,
|
|
2590
|
+
ini_slug=ini_slug,
|
|
2591
|
+
collection=collection,
|
|
2592
|
+
entry_index=entry_index,
|
|
2593
|
+
)
|
|
2574
2594
|
)
|
|
2575
2595
|
findings.extend(entry_findings)
|
|
2576
|
-
return memberships, legacy_memberships, findings,
|
|
2596
|
+
return memberships, legacy_memberships, findings, parse_blocked_memberships
|
|
2577
2597
|
|
|
2578
2598
|
|
|
2579
2599
|
def _membership_status(membership: WorkspaceMembership) -> str | None:
|
|
@@ -2856,6 +2876,115 @@ def _legacy_canonical_alias(entry: LegacyWorkspaceEntry) -> str | None:
|
|
|
2856
2876
|
return None
|
|
2857
2877
|
|
|
2858
2878
|
|
|
2879
|
+
_SELECTED_SPEC_COLLECTIONS = frozenset(
|
|
2880
|
+
{"backlog.open", "work.queue", "work.active", "work.shipped"}
|
|
2881
|
+
)
|
|
2882
|
+
|
|
2883
|
+
|
|
2884
|
+
def selected_membership_status(root: Path, selectors: list[str]) -> dict[str, object]:
|
|
2885
|
+
"""Return membership occurrences for an explicit ordered spec selection.
|
|
2886
|
+
|
|
2887
|
+
The selected spec artifacts need not exist. Only ``workspace.toml`` is read;
|
|
2888
|
+
matching is performed on canonical repository-relative artifact identities.
|
|
2889
|
+
"""
|
|
2890
|
+
if not selectors:
|
|
2891
|
+
return {"error": {"code": "empty_selection"}}
|
|
2892
|
+
|
|
2893
|
+
selected_artifact_paths: list[str] = []
|
|
2894
|
+
for selector in selectors:
|
|
2895
|
+
artifact_path = f"{selector}/spec.md" if isinstance(selector, str) else ""
|
|
2896
|
+
if (
|
|
2897
|
+
not _is_canonical_spec_artifact_path(artifact_path)
|
|
2898
|
+
or _confined_artifact_path(root, selector) is None
|
|
2899
|
+
):
|
|
2900
|
+
return {"error": {"code": "invalid_selector"}}
|
|
2901
|
+
selected_artifact_paths.append(artifact_path)
|
|
2902
|
+
|
|
2903
|
+
workspace_path = _confined_artifact_path(root, "workspace.toml")
|
|
2904
|
+
if workspace_path is None:
|
|
2905
|
+
return {"error": {"code": "invalid_workspace"}}
|
|
2906
|
+
try:
|
|
2907
|
+
workspace = parse_workspace(workspace_path)
|
|
2908
|
+
except tomllib.TOMLDecodeError:
|
|
2909
|
+
return {"error": {"code": "malformed_toml"}}
|
|
2910
|
+
except OSError:
|
|
2911
|
+
return {"error": {"code": "invalid_workspace"}}
|
|
2912
|
+
|
|
2913
|
+
(
|
|
2914
|
+
memberships,
|
|
2915
|
+
legacy_memberships,
|
|
2916
|
+
findings,
|
|
2917
|
+
parse_blocked_memberships,
|
|
2918
|
+
) = _extract_canonical_memberships(workspace)
|
|
2919
|
+
if any(finding.code == "invalid_workspace" for finding in findings):
|
|
2920
|
+
return {"error": {"code": "invalid_workspace"}}
|
|
2921
|
+
|
|
2922
|
+
occurrences_by_path: dict[str, list[dict[str, object]]] = {
|
|
2923
|
+
path: [] for path in selected_artifact_paths
|
|
2924
|
+
}
|
|
2925
|
+
for membership in memberships:
|
|
2926
|
+
path = membership.entry.path
|
|
2927
|
+
if (
|
|
2928
|
+
membership.entry.kind != "spec"
|
|
2929
|
+
or membership.collection not in _SELECTED_SPEC_COLLECTIONS
|
|
2930
|
+
or path not in occurrences_by_path
|
|
2931
|
+
):
|
|
2932
|
+
continue
|
|
2933
|
+
occurrences_by_path[path].append(
|
|
2934
|
+
{
|
|
2935
|
+
"canonical_artifact_path": path,
|
|
2936
|
+
"initiative": membership.ini_slug or None,
|
|
2937
|
+
"collection": membership.collection,
|
|
2938
|
+
"entry_index": membership.entry_index,
|
|
2939
|
+
"form": "canonical",
|
|
2940
|
+
}
|
|
2941
|
+
)
|
|
2942
|
+
for legacy_membership in legacy_memberships:
|
|
2943
|
+
path = _legacy_canonical_alias(legacy_membership.entry)
|
|
2944
|
+
if (
|
|
2945
|
+
legacy_membership.collection not in _SELECTED_SPEC_COLLECTIONS
|
|
2946
|
+
or path not in occurrences_by_path
|
|
2947
|
+
):
|
|
2948
|
+
continue
|
|
2949
|
+
occurrences_by_path[path].append(
|
|
2950
|
+
{
|
|
2951
|
+
"canonical_artifact_path": path,
|
|
2952
|
+
"initiative": legacy_membership.ini_slug or None,
|
|
2953
|
+
"collection": legacy_membership.collection,
|
|
2954
|
+
"entry_index": legacy_membership.entry_index,
|
|
2955
|
+
"form": "legacy",
|
|
2956
|
+
}
|
|
2957
|
+
)
|
|
2958
|
+
for blocked_membership in parse_blocked_memberships:
|
|
2959
|
+
path = blocked_membership.canonical_artifact_path
|
|
2960
|
+
if (
|
|
2961
|
+
blocked_membership.collection not in _SELECTED_SPEC_COLLECTIONS
|
|
2962
|
+
or path not in occurrences_by_path
|
|
2963
|
+
):
|
|
2964
|
+
continue
|
|
2965
|
+
occurrences_by_path[path].append(
|
|
2966
|
+
{
|
|
2967
|
+
"canonical_artifact_path": path,
|
|
2968
|
+
"initiative": blocked_membership.ini_slug or None,
|
|
2969
|
+
"collection": blocked_membership.collection,
|
|
2970
|
+
"entry_index": blocked_membership.entry_index,
|
|
2971
|
+
"form": "parse-blocked",
|
|
2972
|
+
}
|
|
2973
|
+
)
|
|
2974
|
+
|
|
2975
|
+
return {
|
|
2976
|
+
"results": [
|
|
2977
|
+
{
|
|
2978
|
+
"selected_directory": selector,
|
|
2979
|
+
"canonical_artifact_path": artifact_path,
|
|
2980
|
+
"membership_present": bool(occurrences_by_path[artifact_path]),
|
|
2981
|
+
"occurrences": occurrences_by_path[artifact_path],
|
|
2982
|
+
}
|
|
2983
|
+
for selector, artifact_path in zip(selectors, selected_artifact_paths, strict=True)
|
|
2984
|
+
]
|
|
2985
|
+
}
|
|
2986
|
+
|
|
2987
|
+
|
|
2859
2988
|
def _legacy_membership_is_cooled(
|
|
2860
2989
|
membership: LegacyWorkspaceMembership,
|
|
2861
2990
|
root: Path | None,
|
|
@@ -3421,8 +3550,12 @@ def run_canonical_reconciliation(
|
|
|
3421
3550
|
memberships,
|
|
3422
3551
|
legacy_memberships,
|
|
3423
3552
|
parse_findings,
|
|
3424
|
-
|
|
3553
|
+
parse_blocked_memberships,
|
|
3425
3554
|
) = _extract_canonical_memberships(workspace)
|
|
3555
|
+
parse_blocked_path_counts: dict[str, int] = {}
|
|
3556
|
+
for blocked in parse_blocked_memberships:
|
|
3557
|
+
path = blocked.canonical_artifact_path
|
|
3558
|
+
parse_blocked_path_counts[path] = parse_blocked_path_counts.get(path, 0) + 1
|
|
3426
3559
|
# Cooling is applied at evaluation and emission, never here. Every fact
|
|
3427
3560
|
# derived below — by_path, duplicate_paths, cycle_paths, legacy_alias_counts
|
|
3428
3561
|
# and the structural loop — must see a cooled artifact as *cooled*, not as
|
{agentbundle-0.43.1 → agentbundle-0.44.2}/agentbundle/catalogue_tooling/initialise_self_hosted.py
RENAMED
|
@@ -28,6 +28,8 @@ from dataclasses import dataclass, field
|
|
|
28
28
|
from pathlib import Path
|
|
29
29
|
from typing import Any
|
|
30
30
|
|
|
31
|
+
from agentbundle.build.user_libs import PACK_NAME as _USER_LIBS_PACK
|
|
32
|
+
from agentbundle.build.user_libs import PACKAGE_SUBPATH as _USER_LIBS_PACKAGE_SUBPATH
|
|
31
33
|
from agentbundle.catalogue_tooling.file_safety import (
|
|
32
34
|
UnsafeContentError,
|
|
33
35
|
read_confined_regular_file,
|
|
@@ -116,6 +118,33 @@ _BUILD_RESIDUE_DIRS: frozenset[str] = frozenset(
|
|
|
116
118
|
_BUILD_RESIDUE_FILES: frozenset[str] = frozenset({".DS_Store", "coverage.xml"})
|
|
117
119
|
_VENDORED_PACK_EXCLUDE: tuple[str, ...] = ("tests/",)
|
|
118
120
|
|
|
121
|
+
# The credbroker project directory: the parent of the package `user_libs`
|
|
122
|
+
# resolves. `user_libs._package_source_dir` looks for the package at
|
|
123
|
+
# `packs_dir.parent / PACKAGE_SUBPATH`, i.e. `<catalogue root>/packages/
|
|
124
|
+
# credbroker/credbroker/`, so a derived catalogue must carry it at exactly that
|
|
125
|
+
# path. Derived from the resolver's own constant rather than re-spelled, so the
|
|
126
|
+
# copy follows the resolver if that path ever moves.
|
|
127
|
+
#
|
|
128
|
+
# Absent it, `compute_projections` finds no sources and returns `[]`, which
|
|
129
|
+
# makes BOTH its consumers silent no-ops in the derived tree: `apply_projection`
|
|
130
|
+
# writes no `.agentbundle/lib/credbroker/` floor, and `check_drift` compares
|
|
131
|
+
# nothing and reports clean. The pack-vendored copy under
|
|
132
|
+
# `.apm/user-libs/credbroker/` still arrives with the pack, so credbroker still
|
|
133
|
+
# runs — as frozen content with no source and no drift signal.
|
|
134
|
+
#
|
|
135
|
+
# This is deliberately NOT the `packages/agentbundle/` treatment. That one is
|
|
136
|
+
# vendored to `.agentbundle/tooling/agentbundle/` because it is an *install
|
|
137
|
+
# source* the adopter `pip install -e`s. credbroker is a *build input resolved
|
|
138
|
+
# by relative path*. Same principle, different mechanics: the two paths are not
|
|
139
|
+
# interchangeable and must not be reconciled.
|
|
140
|
+
_USER_LIBS_PACKAGE_DIR: str = _USER_LIBS_PACKAGE_SUBPATH.parent.as_posix()
|
|
141
|
+
|
|
142
|
+
# No test content ships to a derived catalogue — the same boundary
|
|
143
|
+
# `_VENDORED_PACK_EXCLUDE` draws. `user_libs.collect_sources` already excludes
|
|
144
|
+
# `tests` from the projection, so the drift gate compares the same file set
|
|
145
|
+
# either way and this costs the gate nothing.
|
|
146
|
+
_USER_LIBS_PACKAGE_EXCLUDE: tuple[str, ...] = ("tests/",)
|
|
147
|
+
|
|
119
148
|
|
|
120
149
|
# ---------------------------------------------------------------------------
|
|
121
150
|
# Dataclasses
|
|
@@ -780,6 +809,42 @@ def _write_ownership_state(target: Path, state: SelfHostOwnershipState) -> None:
|
|
|
780
809
|
)
|
|
781
810
|
|
|
782
811
|
|
|
812
|
+
def _source_pack_identity(
|
|
813
|
+
source_meta: dict[str, Any], cfg: SelfHostedInitConfig
|
|
814
|
+
) -> str:
|
|
815
|
+
"""Return the pin recorded in the committed ownership state file.
|
|
816
|
+
|
|
817
|
+
Under ``attributed``, that is the source catalogue's name — the accurate
|
|
818
|
+
provenance pin, and permitted because attributed mode makes no promise of
|
|
819
|
+
anonymity.
|
|
820
|
+
|
|
821
|
+
Otherwise it is the **derived** catalogue's name. The source name is
|
|
822
|
+
identity anchor #1, and ``verify()`` allows it zero hits anywhere in
|
|
823
|
+
white-label mode. But the leak check runs over the planned ``file_bytes``
|
|
824
|
+
map, and ``_OWNERSHIP_STATE_FILE`` is written afterwards and is never in
|
|
825
|
+
that map — so pinning the source name here would ship the exact banned
|
|
826
|
+
string in a file the adopter commits, past a control that cannot see it.
|
|
827
|
+
|
|
828
|
+
Bringing the state file inside the leak check would instead make a usable
|
|
829
|
+
pin impossible in the very mode that most needs control over what ships,
|
|
830
|
+
so the value changes rather than the check's scope.
|
|
831
|
+
|
|
832
|
+
The branch is on ``attributed`` rather than on ``white-label`` so that any
|
|
833
|
+
other value fails closed to the non-disclosing pin, matching how
|
|
834
|
+
``_apply_identity_transform_bytes`` and ``verify`` both treat ``attributed``
|
|
835
|
+
as the single exception.
|
|
836
|
+
|
|
837
|
+
Note for editors: this module's own prose is vendored into a target and
|
|
838
|
+
scanned. ``_transform_text`` replaces anchors case-sensitively while
|
|
839
|
+
``verify`` matches case-insensitively, so a differently-cased echo of an
|
|
840
|
+
anchor value here survives replacement and then fails the leak check. Keep
|
|
841
|
+
identity wording generic.
|
|
842
|
+
"""
|
|
843
|
+
if cfg.attribution == "attributed":
|
|
844
|
+
return source_meta.get("catalogue", {}).get("name", "")
|
|
845
|
+
return cfg.name or ""
|
|
846
|
+
|
|
847
|
+
|
|
783
848
|
# ---------------------------------------------------------------------------
|
|
784
849
|
# Next-steps builder
|
|
785
850
|
# ---------------------------------------------------------------------------
|
|
@@ -950,6 +1015,27 @@ def init_self_hosted(cfg: SelfHostedInitConfig) -> SelfHostedInitResult:
|
|
|
950
1015
|
if collect_error:
|
|
951
1016
|
return _fail(collect_error)
|
|
952
1017
|
|
|
1018
|
+
# The credbroker package source travels with the pack that vendors it, in
|
|
1019
|
+
# BOTH tooling modes — it is a build input the user-libs projection resolves
|
|
1020
|
+
# by relative path, not an install source. See _USER_LIBS_PACKAGE_DIR.
|
|
1021
|
+
if _USER_LIBS_PACK in pack_names:
|
|
1022
|
+
src_user_libs = cfg.source / _USER_LIBS_PACKAGE_DIR
|
|
1023
|
+
if src_user_libs.is_dir() and not src_user_libs.is_symlink():
|
|
1024
|
+
collect_error = _collect_source_dir(
|
|
1025
|
+
src_user_libs,
|
|
1026
|
+
_USER_LIBS_PACKAGE_DIR,
|
|
1027
|
+
kind="package",
|
|
1028
|
+
exclude=_USER_LIBS_PACKAGE_EXCLUDE,
|
|
1029
|
+
)
|
|
1030
|
+
if collect_error:
|
|
1031
|
+
return _fail(collect_error)
|
|
1032
|
+
else:
|
|
1033
|
+
diagnostics.append(
|
|
1034
|
+
f"{_USER_LIBS_PACKAGE_DIR}/ not found in source; the "
|
|
1035
|
+
f"{_USER_LIBS_PACK} pack ships without its package source, so "
|
|
1036
|
+
"the user-libs projection and its drift gate stay inert"
|
|
1037
|
+
)
|
|
1038
|
+
|
|
953
1039
|
# Vendored mode: copy agentbundle source and catalogue-curation.
|
|
954
1040
|
if cfg.tooling == "vendored":
|
|
955
1041
|
src_agentbundle = cfg.source / "packages" / "agentbundle"
|
|
@@ -1097,7 +1183,7 @@ def init_self_hosted(cfg: SelfHostedInitConfig) -> SelfHostedInitResult:
|
|
|
1097
1183
|
],
|
|
1098
1184
|
adapters=adapters,
|
|
1099
1185
|
managed_target_path=str(cfg.target),
|
|
1100
|
-
source_pack_identity=source_meta
|
|
1186
|
+
source_pack_identity=_source_pack_identity(source_meta, cfg),
|
|
1101
1187
|
source_root_kind="self-hosted-source",
|
|
1102
1188
|
)
|
|
1103
1189
|
_write_ownership_state(cfg.target, new_state)
|