agentbundle 0.35.0__tar.gz → 0.35.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.35.0/agentbundle.egg-info → agentbundle-0.35.2}/PKG-INFO +1 -1
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue.py +145 -29
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/system_trust.py +82 -14
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/version.py +1 -1
- {agentbundle-0.35.0 → agentbundle-0.35.2/agentbundle.egg-info}/PKG-INFO +1 -1
- {agentbundle-0.35.0 → agentbundle-0.35.2}/pyproject.toml +1 -1
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_trust_fallback_tls.py +4 -4
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_trust_fallback.py +193 -8
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_system_trust.py +81 -7
- {agentbundle-0.35.0 → agentbundle-0.35.2}/MANIFEST.in +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/README-pypi.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/README.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/__init__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/__main__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/adapter.schema.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/adapter.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-authoring-standards.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/guides/_shared/reference/catalogue-ci-contract.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/manifest.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/packs/AGENTS.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/packs/README.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/packs/_example/.apm/skills/example-skill/evals/eval_queries.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/packs/_example/README.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/packs/_example/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/profiles/AGENTS.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/profiles/README.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/profiles/_example/README.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/profiles/_example/profile.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_gemini_admissibility.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_pack_metadata.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue-scaffold/tests/conformance/test_shared_library_boundaries.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/catalogue.schema.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/guide.schema.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/install-defaults.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/install-marker.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/marketplace-entry.schema.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/pack.schema.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/plugin-manifest.derived.schema.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/plugin-manifest.schema.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/profile.schema.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/public-contracts.txt +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/skill-manifest.schema.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/skill.schema.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/target-vocab.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/_data/workspace_status_engine.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/__init__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/__main__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/adapter_root_bins.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/adapters/__init__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/adapters/claude_code.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/adapters/codex.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/adapters/copilot.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/adapters/cursor.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/adapters/gemini.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/adapters/kiro.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/adapters/kiro_cli.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/adapters/kiro_ide.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/contract.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/hook_wiring_rules.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/lint_packs.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/main.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/phase_order.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projection_io.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/__init__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/codex_agent_toml.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/copilot_agent_md.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/copilot_hooks_json.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/direct_directory.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/gemini_command_toml.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/hook_id.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/kiro_ide_hook.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/merge_into_agent_json.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/merge_json.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/plugin_hooks.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/projections/user_merge_json.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/recipes/composite-agents-md.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/recipes/composite-marketplace.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/recipes/marketplace.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/recipes/per-pack-apm-package.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/recipes/per-pack-claude-plugin.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/recipes/per-pack-overlay.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/recipes/self-host.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/scope_rails.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/self_host.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/shared_libs.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/target_resolver.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/user_libs.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/build/validate.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/__init__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/archive.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/build.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/config.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/contracts_inspector.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/defaults.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/diagnostics.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/file_safety.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/identity.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/initialise.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/initialise_self_hosted.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/lint.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/package.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/results.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/self_host.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/self_host_windows.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/skill_spec_lint.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/toml_emit.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/catalogue_tooling/verify.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/categories.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/cli.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/__init__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/_common.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/_drop_warning.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/adapt.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/catalogue_build.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/catalogue_contracts.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/catalogue_init.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/catalogue_lint.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/catalogue_package.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/catalogue_self_host.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/catalogue_sync_defaults.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/catalogue_tooling_stub.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/catalogue_verify.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/config.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/diff.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/docs.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/init_state.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/install.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/list_installed.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/list_packs.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/list_profiles.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/list_targets.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/oplog_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/pack_config_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/pack_evals.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/package_catalogue.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/profile.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/reconcile.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/render.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/scaffold.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/show.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/uninstall.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/upgrade.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/commands/validate.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/config.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/https_catalogue.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/local_exclude.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/oplog.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/pack_inventory.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/render.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/safety.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/scaffold.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/scope.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/source_defaults.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/statelock.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/user_config.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle/workspace_mcp.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle.egg-info/SOURCES.txt +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle.egg-info/dependency_links.txt +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle.egg-info/entry_points.txt +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle.egg-info/requires.txt +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/agentbundle.egg-info/top_level.txt +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/conftest.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/setup.cfg +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/templates/install-marker.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/__init__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/_support.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/__init__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/README.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/claude-code-2.1.226-hook-events.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/claude-code-2.1.228-hook-events.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/core/.apm/agents/bar.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/core/.apm/commands/qux.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/baz.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/core/.apm/hook-wiring/qux.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/core/.apm/hooks/baz.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/core/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/core/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/governance-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/governance-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/governance-extras/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/monorepo-extras/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/monorepo-extras/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/monorepo-extras/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/product-documentation/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/product-documentation/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/product-documentation/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/packs/user-guide-diataxis/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/fixtures/recipes/bogus-target.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_adapter_claude_code.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_adapter_codex.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_adapter_copilot.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_adapter_cursor.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_adapter_gemini.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_adapter_kiro.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_adapter_kiro_alias.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_adapter_kiro_cli.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_adapter_kiro_ide.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_adapter_root_bins_projection.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_build_ships_seeds.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_contract.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_contract_scope.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_contract_v07.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_contract_v08.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_direct_directory_cleanup.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_end_to_end_build.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_hook_wiring_rules.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_lint_packs.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_load_pack_hook_wiring_safely.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_pack_schema.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_pack_schema_allowed_adapters.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_pack_schema_install.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_pipeline.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_plugin_hooks.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_plugin_manifest_schema.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_plugin_publication_gates.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_projectable_subset.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_projection_io.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_projections_merge_json.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_scope_rails.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_security.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_self_host_check.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_self_host_fixture_guard.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_self_host_metadata_policy.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_self_host_recipe_config.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_shared_libs_projection.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_shared_prefix_contract.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_user_libs_projection.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_validate.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/build_pipeline/test_writers_emit_lf.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/conftest.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/adapt/.adapt-discovery.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/adapt/values.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/.claude-plugin/marketplace.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/catalogue.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/packs/.gitkeep +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/packs/_example/.apm/skills/example-skill/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/packs/_example/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/packs/_example/README.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/packs/_example/evals/eval_queries.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/packs/_example/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/profiles/.gitkeep +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/profiles/_example/README.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/blank_catalogue/profiles/_example/profile.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield/values.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt/AGENTS.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt/AGENTS.upstream.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt/DESIGN.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt/EXPECTED_TREE.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt/docs/CHARTER.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt/docs/guides/how-to/index.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt/docs/howto/getting-started.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt-expected/AGENTS.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt-expected/docs/CHARTER.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/.adapt-discovery.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/brownfield-adapt-user-home/.agentbundle/state.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/argv-flag/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/argv-flag/scripts/cli.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/argv-flag-derived/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/argv-flag-derived/scripts/cli.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/argv-flag-normalised/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/argv-flag-normalised/scripts/cli.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/conforming/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/conforming/scripts/cli.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/dotfile-grep/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/dotfile-grep/scripts/leak.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/dotfile-with-optout/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/dotfile-with-optout/scripts/legit.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/mcp-server-headers/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/mcp-server-headers/scripts/cli.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/creds/skills/missing-dont-block/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/install/catalogue/packs/alpha/.apm/agents/helper.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/install/catalogue/packs/alpha/.apm/commands/cmd.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/install/catalogue/packs/alpha/.apm/hook-wiring/run.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/install/catalogue/packs/alpha/.apm/hooks/run.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/install/catalogue/packs/alpha/.apm/skills/example/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/install/catalogue/packs/alpha/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/install/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/kiro_ide_hook/ask_agent_basic.kiro.hook +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/kiro_ide_hook/run_command_with_placeholder.kiro.hook +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/lint_packs/clean/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/lint_packs/clean/seeds/README.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/list-installed/golden_120col.txt +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/list-installed/golden_80col.txt +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/list_packs/catalogue/packs/alpha/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/list_packs/catalogue/packs/beta/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/.apm/skills/local-test/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/local_scope/catalogue/packs/local-test-pack/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/cc-user-hooks/.apm/hook-wiring/on-prompt.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/cc-user-hooks/.apm/hooks/on-prompt.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/cc-user-hooks/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/kiro-repo-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/kiro-repo-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/kiro-repo-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/kiro-repo-hooks/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/kiro-user-hooks/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/kiro-user-hooks/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/kiro-user-hooks/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/kiro-user-hooks/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-missing-attach/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-missing-attach/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-pascal-events/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-pascal-events/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hook-wiring/on-spawn.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-unknown-agent/.apm/hooks/on-spawn.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/packs/malformed-kiro-unknown-agent/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/scaffold/test-pack/seeds/AGENTS.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/scaffold/test-pack/seeds/_agents-footer.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/scaffold/test-pack/seeds/docs/CHARTER.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v1/packs/core/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v2/packs/core/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/agents/reviewer.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/commands/deploy.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hook-wiring/pre-commit.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/lint.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/hooks/pre-commit.sh +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.apm/skills/work-loop/SKILL.md +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/.claude-plugin/plugin.json +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/upgrade/catalogue_v3/packs/core/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/validate/bad_recipe_pack/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/validate/malformed_pack/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/validate/valid_pack/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/fixtures/validate/version_mismatch_pack/pack.toml +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/__init__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_adapt_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_adapt_dual_scope.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_adapt_preflight_detection.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_adapt_schema_migration.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_apm_install_route.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_blank_catalogue.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_brownfield_adapt_end_to_end.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_brownfield_round_trip.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_brownfield_user_home_fixture.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_build_check_drift_gates.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_build_derivation_apm.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_build_derivation_claude_plugins.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_catalogue_init.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_cc_user_hooks_fixture.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_claude_plugins_install_route.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_config_cascade.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_credential_brokers_pack_install.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_credentials_wheel.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_discovery_schema_cross_consumer.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_editable_source_detection.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_fixtures_validate.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_hook_wiring_ingress.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_adapt_chain.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_converters_user_scope.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_copilot_full_parity.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_core_smoke.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_default_source.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_dependencies_gate.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_dual_scope.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_orphan_reshape.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_pack_metadata_shape.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_profile.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_profile_live.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_repo_scope_per_adapter.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_research_user_scope.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_seed_delivery.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_session_start_wiring.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_upgrade_offer.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_user_hooks.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_install_user_scope_allowed_adapters.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_kiro_ide_hook_e2e.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_kiro_repo_hooks_fixture.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_kiro_user_hooks_fixture.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_list_packs_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_local_scope_install.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_marketplace_entry_validation.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_marketplace_manifest_regression.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_multi_pack_install.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_orphan_cleanup_respects_foreign_state.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_plugin_route_membership.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_recommends_cross_scope.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_reconcile.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_reserved_path_filter.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_scaffold_projection.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_self_host_schema_migration.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_self_host_sweep_respects_state.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_shared_prefix_coexistence.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_show_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_tier_invariants.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_uninstall_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_uninstall_user_hooks.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_upgrade_attach_to_agent.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_upgrade_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_upgrade_user_hooks.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_version_gate_matrix.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_workspace_mcp_git_fsm.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/integration/test_zipapp.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/test_adapter_permissions_projection.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/test_workspace_mcp_elicit.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/test_workspace_mcp_event_bridge.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/test_workspace_mcp_git.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/test_workspace_mcp_lifecycle.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/test_workspace_mcp_stdin.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/test_workspace_mcp_tools.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/__init__.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_adapt_discovery_schema.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_append_layout_section.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_architect_readme_install_command.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_ci_contract.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_curation_deps.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_init_cli_self_hosted.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_pack_defaults.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_self_hosted_export_removal.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_skill_spec_lint.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_archive.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_build.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_defaults.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_foundation.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_identity.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_init.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_lint.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_package.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_self_host.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_self_hosted_init.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_source_package.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_tooling_verify.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_wave2_schema.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_wave2_validation.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_wave3_contracts_cli.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_wave3_contracts_inspector.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_wave3_init_nextsteps.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_catalogue_wave3_offline_navigation.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_cli_catalogue_optional.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_cli_help_lists_config.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_cli_path_normalisation.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_cli_profile_surface.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_cli_scope_flags.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_codex_agent_toml.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_codex_projection_modes.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_common_classify_seeds.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_config.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_config_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_configured_adapter.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_confirm_helper.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_contract_parity.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_contract_v0_3_schema.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_copilot_agent_md.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_copilot_hooks_json.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_copilot_user_scope_wiring.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_credbroker_lint_hardening.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_dependencies_batch.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_diff_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_footprint_ownership.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_https_catalogue.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_init_state_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_argparse_adapter_flag.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_argparse_emit_install_routes.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_defaults_preferred_adapter.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_dropped_primitives_warning.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_event_dropped_wirings.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_first_value_handoff.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_force_help.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_inband_detection.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_messages.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_messages_repo_scope.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_refusal_ordering.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_install_state_provenance.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_kiro_ide_hook_projection.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_kiro_ide_hook_rail.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_kiro_ide_hook_schema.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_lint_agent_artifacts_metadata_auth.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_list_installed_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_list_installed_status.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_list_targets_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_local_scope_schema.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_local_scope_t10_uninstall.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_local_scope_t12_show.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_local_scope_t2_resolve.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_local_scope_t3_config.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_local_scope_t4_state_path.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_local_scope_t5_list_installed.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_local_scope_t7_install_gates.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_local_scope_t8_install.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_local_scope_t9_exclude.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_marker_schema_version_parity.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_merge_into_agent_json.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_multi_adapter_disambiguator.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_nested_symlink_hardening.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_org_bootstrap.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_pack_config_api.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_pack_inventory.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_package_catalogue.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_packstate_source_provenance.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_pipeline_phase_order.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_plugin_scope_filter.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_profile_reader.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_render.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_render_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_render_table.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_resolve_state_path.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_resolve_target_adapter_user_config.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_resolve_user_scope_target_adapter.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_safety.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_safety_repo_scope_prefixes.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_safety_scan_per_pack_scoping.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_scaffold_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_scope.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_self_host_windows.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_shared_prefix_disclosure.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_source_conflict_guard.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_source_defaults.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_state_v01_refuse_write.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_state_v02.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_state_v0_4_schema.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_statelock.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_target_resolver.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_toml_emitters.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_unresolved_markers.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_upgrade_bulk_all.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_upgrade_recap.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_upgrade_source_inference.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_user_config_io.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_user_config_isolation.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_user_config_path.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_user_config_source.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_user_merge_json.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_validate_attach_to_agent.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_validate_categories.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_validate_cmd.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_validate_hook_wiring_per_file_compatibility.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_values_from_shapes.py +0 -0
- {agentbundle-0.35.0 → agentbundle-0.35.2}/tests/unit/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentbundle
|
|
3
|
-
Version: 0.35.
|
|
3
|
+
Version: 0.35.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
|
|
@@ -163,6 +163,22 @@ def _github_archive_url(owner: str, repo: str, ref: str) -> str:
|
|
|
163
163
|
return f"https://github.com/{owner}/{repo}/archive/{ref}.tar.gz"
|
|
164
164
|
|
|
165
165
|
|
|
166
|
+
def _install_certificates_hint() -> str | None:
|
|
167
|
+
"""The python.org certificate-setup command, with the real version in it.
|
|
168
|
+
|
|
169
|
+
Printing a literal "Python 3.x" placeholder means the adopter cannot paste
|
|
170
|
+
what they are shown — and the adopters who see this message are the ones who
|
|
171
|
+
least need an extra substitution step. Returns ``None`` when the script is
|
|
172
|
+
not present, which is the signal that this interpreter is not a python.org
|
|
173
|
+
framework build and the advice would be wrong.
|
|
174
|
+
"""
|
|
175
|
+
minor = f"{sys.version_info.major}.{sys.version_info.minor}"
|
|
176
|
+
script = Path(f"/Applications/Python {minor}/Install Certificates.command")
|
|
177
|
+
if script.is_file():
|
|
178
|
+
return f'open "{script}"'
|
|
179
|
+
return None
|
|
180
|
+
|
|
181
|
+
|
|
166
182
|
def _is_cert_verification_failure(exc: BaseException) -> bool:
|
|
167
183
|
"""True when *exc* is a certificate-verification failure.
|
|
168
184
|
|
|
@@ -182,6 +198,7 @@ def _verification_failure_message(
|
|
|
182
198
|
*,
|
|
183
199
|
fallback_note: str,
|
|
184
200
|
offer_opt_out: bool = True,
|
|
201
|
+
empty_store: bool = False,
|
|
185
202
|
) -> str:
|
|
186
203
|
"""Explain a verification failure in terms of the adopter's next action.
|
|
187
204
|
|
|
@@ -196,13 +213,41 @@ def _verification_failure_message(
|
|
|
196
213
|
the message never advises setting a variable that is already set.
|
|
197
214
|
"""
|
|
198
215
|
host = urllib.parse.urlsplit(url).netloc
|
|
199
|
-
|
|
200
|
-
|
|
216
|
+
|
|
217
|
+
# Numbered at render time: the empty-store step only appears when it applies,
|
|
218
|
+
# and a hardcoded list would misnumber every step after it.
|
|
219
|
+
steps: list[str] = []
|
|
220
|
+
if empty_store:
|
|
221
|
+
# Almost certainly, not certainly: a populated capath is excluded before
|
|
222
|
+
# we get here, but the store could still be empty *and* the network
|
|
223
|
+
# inspected.
|
|
224
|
+
hint = _install_certificates_hint() if sys.platform == "darwin" else None
|
|
225
|
+
if hint:
|
|
226
|
+
remedy = (
|
|
227
|
+
f" {hint}\n"
|
|
228
|
+
" Or point it at the system bundle:\n"
|
|
229
|
+
" export SSL_CERT_FILE=/etc/ssl/cert.pem"
|
|
230
|
+
)
|
|
231
|
+
elif sys.platform == "darwin":
|
|
232
|
+
remedy = " export SSL_CERT_FILE=/etc/ssl/cert.pem"
|
|
233
|
+
else:
|
|
234
|
+
remedy = (
|
|
235
|
+
" install your certificate authorities into this "
|
|
236
|
+
"interpreter's trust\n"
|
|
237
|
+
" store, or set SSL_CERT_FILE to a PEM bundle containing them"
|
|
238
|
+
)
|
|
239
|
+
steps.append(
|
|
240
|
+
"This Python trusts ZERO certificate authorities, so every HTTPS\n"
|
|
241
|
+
" request from it fails — almost certainly not a corporate-proxy\n"
|
|
242
|
+
" problem. Fix the interpreter's trust store:\n" + remedy
|
|
243
|
+
)
|
|
244
|
+
steps += [
|
|
245
|
+
"Install from a local clone — needs no HTTPS at all:\n"
|
|
201
246
|
" git clone <catalogue-repo> && agentbundle install --pack "
|
|
202
247
|
"<pack> ./<clone>",
|
|
203
|
-
"
|
|
248
|
+
"Ask your IT team for the corporate CA bundle, then:\n"
|
|
204
249
|
" export AGENTBUNDLE_CA_BUNDLE=/path/to/corporate-ca.pem",
|
|
205
|
-
"
|
|
250
|
+
"Check whether a different Python already trusts this network. "
|
|
206
251
|
"Interpreters\n"
|
|
207
252
|
" do not share a certificate store, so one may work where another "
|
|
208
253
|
"fails:\n"
|
|
@@ -212,7 +257,7 @@ def _verification_failure_message(
|
|
|
212
257
|
" SSL_CERT_FILE at its cafile. Creating a virtualenv does NOT "
|
|
213
258
|
"change trust —\n"
|
|
214
259
|
" a venv inherits its base interpreter's store unchanged.",
|
|
215
|
-
"
|
|
260
|
+
"Confirm your proxy allows every host in the redirect chain. A "
|
|
216
261
|
"GitHub\n"
|
|
217
262
|
" archive fetch redirects github.com to codeload.github.com; an "
|
|
218
263
|
"allowlist\n"
|
|
@@ -221,16 +266,24 @@ def _verification_failure_message(
|
|
|
221
266
|
]
|
|
222
267
|
if offer_opt_out:
|
|
223
268
|
steps.append(
|
|
224
|
-
"
|
|
225
|
-
|
|
269
|
+
"Set AGENTBUNDLE_NO_SYSTEM_TRUST=1 to see the raw verification error."
|
|
270
|
+
)
|
|
271
|
+
body = "\n\n".join(f" {n}. {s}" for n, s in enumerate(steps, start=1))
|
|
272
|
+
|
|
273
|
+
if empty_store:
|
|
274
|
+
diagnosis = (
|
|
275
|
+
f"The certificate for {host} could not be verified. {fallback_note}"
|
|
276
|
+
)
|
|
277
|
+
else:
|
|
278
|
+
diagnosis = (
|
|
279
|
+
f"The certificate for {host} could not be verified. {fallback_note} On "
|
|
280
|
+
"a corporate network this usually means a TLS-inspecting proxy "
|
|
281
|
+
"re-signs traffic with a private root CA that Python does not read."
|
|
226
282
|
)
|
|
227
|
-
body = "\n\n".join(steps)
|
|
228
283
|
return (
|
|
229
284
|
f"Failed to fetch catalogue archive: {url} — {detail}\n"
|
|
230
285
|
"\n"
|
|
231
|
-
f"
|
|
232
|
-
"corporate network this usually means a TLS-inspecting proxy re-signs "
|
|
233
|
-
"traffic with a private root CA that Python does not read.\n"
|
|
286
|
+
f"{diagnosis}\n"
|
|
234
287
|
"\n"
|
|
235
288
|
"Troubleshooting, cheapest first:\n"
|
|
236
289
|
"\n"
|
|
@@ -253,15 +306,29 @@ def _fetch_and_extract(url: str, dest: Path) -> None:
|
|
|
253
306
|
system_trust = _system_trust_module()
|
|
254
307
|
|
|
255
308
|
def attempt(context: ssl.SSLContext) -> None:
|
|
309
|
+
# Buffer to a seekable temporary file rather than extracting straight
|
|
310
|
+
# from the response, because "r|gz" is forward-only and that breaks on
|
|
311
|
+
# Windows. A catalogue carries symlinks (CLAUDE.md -> AGENTS.md); when
|
|
312
|
+
# os.symlink is unavailable — the default on Windows without Developer
|
|
313
|
+
# Mode or SeCreateSymbolicLink — tarfile falls back to copying the link
|
|
314
|
+
# target, which means re-reading a member the stream has already passed.
|
|
315
|
+
# On a forward-only stream that raises
|
|
316
|
+
# "seeking backwards is not allowed"; "r:gz" over a real file lets the
|
|
317
|
+
# fallback do its job. Observed in the field on Windows; macOS and Linux
|
|
318
|
+
# never hit it because os.symlink succeeds there.
|
|
319
|
+
#
|
|
256
320
|
# B310: constant github.com archive base assembled from parsed owner/repo/ref.
|
|
257
321
|
with urllib.request.urlopen( # nosec B310
|
|
258
322
|
url, timeout=_FETCH_TIMEOUT_S, context=context
|
|
259
|
-
) as resp,
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
323
|
+
) as resp, tempfile.TemporaryFile() as spool:
|
|
324
|
+
shutil.copyfileobj(resp, spool)
|
|
325
|
+
spool.seek(0)
|
|
326
|
+
with tarfile.open(fileobj=spool, mode="r:gz") as tf:
|
|
327
|
+
# filter="data" rejects unsafe members (absolute paths, ..
|
|
328
|
+
# links, devices, setuid bits) — Python 3.12+ default but
|
|
329
|
+
# explicit for 3.11 compatibility and to silence the 3.14
|
|
330
|
+
# DeprecationWarning. Path-jail is belt; this is braces.
|
|
331
|
+
tf.extractall(path=dest, filter="data")
|
|
265
332
|
|
|
266
333
|
try:
|
|
267
334
|
attempt(system_trust.build_context())
|
|
@@ -292,7 +359,13 @@ def _fetch_and_extract(url: str, dest: Path) -> None:
|
|
|
292
359
|
# administrator trust store to read, a second connection against an
|
|
293
360
|
# identical context would be pure noise, and claiming the anchors "did
|
|
294
361
|
# not complete the chain" would send the adopter after the wrong cause.
|
|
295
|
-
|
|
362
|
+
# An interpreter with an empty trust store is a different fault from an
|
|
363
|
+
# inspected network: nothing verifies, and the administrator keychain
|
|
364
|
+
# alone cannot repair it because it holds private roots, not public ones.
|
|
365
|
+
# Observed in the field on a python.org macOS build whose
|
|
366
|
+
# Install Certificates.command was never run.
|
|
367
|
+
empty_store = system_trust.default_store_is_empty()
|
|
368
|
+
anchors = system_trust.system_anchor_pem(include_public_roots=empty_store)
|
|
296
369
|
if not anchors:
|
|
297
370
|
# Two different causes, and conflating them misdirects the adopter.
|
|
298
371
|
# Off macOS the fallback does not apply at all. *On* macOS it applied
|
|
@@ -314,9 +387,11 @@ def _fetch_and_extract(url: str, dest: Path) -> None:
|
|
|
314
387
|
"the operating system's trust store."
|
|
315
388
|
)
|
|
316
389
|
raise CatalogueError(
|
|
317
|
-
_verification_failure_message(
|
|
390
|
+
_verification_failure_message(
|
|
391
|
+
url, detail, fallback_note=note, empty_store=empty_store
|
|
392
|
+
)
|
|
318
393
|
) from exc
|
|
319
|
-
_retry_with_system_trust(url, dest, attempt, anchors)
|
|
394
|
+
_retry_with_system_trust(url, dest, attempt, anchors, empty_store=empty_store)
|
|
320
395
|
except tarfile.TarError as exc:
|
|
321
396
|
raise CatalogueError(
|
|
322
397
|
f"Failed to extract tarball from {url}: {exc}"
|
|
@@ -328,6 +403,8 @@ def _retry_with_system_trust(
|
|
|
328
403
|
dest: Path,
|
|
329
404
|
attempt: Callable[[ssl.SSLContext], None],
|
|
330
405
|
anchors: str,
|
|
406
|
+
*,
|
|
407
|
+
empty_store: bool = False,
|
|
331
408
|
) -> None:
|
|
332
409
|
"""Retry *attempt* once against operating-system trust *anchors*.
|
|
333
410
|
|
|
@@ -339,14 +416,51 @@ def _retry_with_system_trust(
|
|
|
339
416
|
"""
|
|
340
417
|
system_trust = _system_trust_module()
|
|
341
418
|
host = urllib.parse.urlsplit(url).netloc
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
419
|
+
if empty_store:
|
|
420
|
+
# Recovering the fetch is not the same as fixing the interpreter: the
|
|
421
|
+
# anchors are loaded in memory for this process only. Saying so is the
|
|
422
|
+
# difference between a one-off rescue and quietly masking a broken
|
|
423
|
+
# Python that will fail the adopter's next pip or requests call.
|
|
424
|
+
# Name the wider trust set explicitly. The narrow decision was already
|
|
425
|
+
# auditable; this one adds a public root set on top, and a trust decision
|
|
426
|
+
# the adopter cannot see is one they cannot audit.
|
|
427
|
+
extra = (
|
|
428
|
+
"the administrator keychain plus the system public certificate "
|
|
429
|
+
"bundle" if sys.platform == "darwin" else "operating-system trust anchors"
|
|
430
|
+
)
|
|
431
|
+
hint = _install_certificates_hint() if sys.platform == "darwin" else None
|
|
432
|
+
if hint:
|
|
433
|
+
fix = f" {hint}\n (or: export SSL_CERT_FILE=/etc/ssl/cert.pem)"
|
|
434
|
+
elif sys.platform == "darwin":
|
|
435
|
+
fix = " export SSL_CERT_FILE=/etc/ssl/cert.pem"
|
|
436
|
+
else:
|
|
437
|
+
fix = (
|
|
438
|
+
" install your certificate authorities into this interpreter's\n"
|
|
439
|
+
" trust store, or set SSL_CERT_FILE to a PEM bundle"
|
|
440
|
+
)
|
|
441
|
+
print(
|
|
442
|
+
f"agentbundle: this Python trusts no certificate authorities, so "
|
|
443
|
+
f"verification failed for {host}. Retrying against {extra} — this "
|
|
444
|
+
"rescues the install but does not fix the interpreter, so every "
|
|
445
|
+
"other tool will keep failing. To stop that:\n" + fix,
|
|
446
|
+
file=sys.stderr,
|
|
447
|
+
)
|
|
448
|
+
else:
|
|
449
|
+
print(
|
|
450
|
+
f"agentbundle: certificate verification failed for {host}; "
|
|
451
|
+
"retrying with operating-system trust anchors",
|
|
452
|
+
file=sys.stderr,
|
|
453
|
+
)
|
|
454
|
+
if empty_store:
|
|
455
|
+
exhausted = (
|
|
456
|
+
"This Python trusts no certificate authority at all — its trust store "
|
|
457
|
+
"is empty — and the operating-system anchors did not complete the "
|
|
458
|
+
"chain either."
|
|
459
|
+
)
|
|
460
|
+
else:
|
|
461
|
+
exhausted = (
|
|
462
|
+
"The operating-system trust anchors did not complete the chain either."
|
|
463
|
+
)
|
|
350
464
|
# Attempt 1 may have extracted part of the archive before failing mid-stream.
|
|
351
465
|
# Clearing the destination keeps the retry from layering a second download
|
|
352
466
|
# over the first and producing a catalogue that is a mix of both.
|
|
@@ -359,7 +473,9 @@ def _retry_with_system_trust(
|
|
|
359
473
|
# wrapped by urlopen and would otherwise escape as a bare exception.
|
|
360
474
|
detail = getattr(exc, "reason", None) or exc
|
|
361
475
|
raise CatalogueError(
|
|
362
|
-
_verification_failure_message(
|
|
476
|
+
_verification_failure_message(
|
|
477
|
+
url, detail, fallback_note=exhausted, empty_store=empty_store
|
|
478
|
+
)
|
|
363
479
|
) from exc
|
|
364
480
|
except tarfile.TarError as exc:
|
|
365
481
|
raise CatalogueError(
|
|
@@ -58,22 +58,36 @@ from pathlib import Path
|
|
|
58
58
|
|
|
59
59
|
from agentbundle.catalogue import CatalogueError
|
|
60
60
|
|
|
61
|
-
#
|
|
62
|
-
#
|
|
63
|
-
#
|
|
64
|
-
#
|
|
65
|
-
# Apple's ``SystemRootCertificates.keychain`` is *not* read. The retry context
|
|
66
|
-
# already starts from ``create_default_context()``, so the public roots are
|
|
67
|
-
# present; adding Apple's root program on top would widen trust to a second,
|
|
68
|
-
# independently curated set for no gain. Measured on a corporate host: reading
|
|
69
|
-
# System.keychain alone produced exactly the same anchor count as reading both,
|
|
70
|
-
# i.e. Apple's keychain contributed nothing while enlarging the trust surface on
|
|
71
|
-
# the one fetch path with no post-transport integrity check.
|
|
61
|
+
# The administrator keychain, always. It needs administrator or MDM rights to
|
|
62
|
+
# write, and it is where a corporate proxy root actually lands — so it is the
|
|
63
|
+
# store that holds the material this feature exists to find.
|
|
72
64
|
#
|
|
73
65
|
# The user's ``login.keychain-db`` is absent and must stay absent: it is writable
|
|
74
66
|
# without administrator rights, so a root landing there is not an IT decision.
|
|
75
67
|
_ADMIN_KEYCHAINS = ("/Library/Keychains/System.keychain",)
|
|
76
68
|
|
|
69
|
+
# Apple's public TLS roots, read **only** when the default trust store holds no
|
|
70
|
+
# anchors — see ``system_anchor_pem``. RFC-0086 D4 excluded Apple's material
|
|
71
|
+
# outright; the erratum narrows that to this one state, where an interpreter
|
|
72
|
+
# trusts nothing and the administrator keychain cannot repair it because it holds
|
|
73
|
+
# private roots.
|
|
74
|
+
#
|
|
75
|
+
# Read the *file*, not the keychain, and the distinction is load-bearing.
|
|
76
|
+
# ``/etc/ssl/cert.pem`` is Apple's own TLS-purpose export: root-owned, and
|
|
77
|
+
# measured on a current host it carries 128 certificates and **zero**
|
|
78
|
+
# Apple-operated roots. Dumping ``SystemRootCertificates.keychain`` instead
|
|
79
|
+
# yields 158, of which 14 are Apple-operated and several are single-purpose —
|
|
80
|
+
# ``Apple Platform Code Signing {ECC,RSA} Root CA``, ``Developer ID
|
|
81
|
+
# Certification Authority``, ``Apple Platform Bootstrap ECC Root CA``. None of
|
|
82
|
+
# those carry an EKU extension, so OpenSSL's server-auth purpose check does not
|
|
83
|
+
# exclude them; Apple confines them through trust settings, which
|
|
84
|
+
# ``find-certificate`` discards. Trusting code-signing roots for TLS is not what
|
|
85
|
+
# an unconfigured interpreter was missing. The file also needs no subprocess.
|
|
86
|
+
_APPLE_TLS_BUNDLE = "/etc/ssl/cert.pem"
|
|
87
|
+
|
|
88
|
+
# Fallback only, if the export above is absent on some macOS version.
|
|
89
|
+
_APPLE_ROOT_KEYCHAIN = "/System/Library/Keychains/SystemRootCertificates.keychain"
|
|
90
|
+
|
|
77
91
|
_SECURITY_BIN = "/usr/bin/security"
|
|
78
92
|
|
|
79
93
|
_PEM_MARKER = "BEGIN CERTIFICATE"
|
|
@@ -136,8 +150,47 @@ def resolve_trust_paths(env: dict | None = None) -> tuple[str | None, str | None
|
|
|
136
150
|
return (cafile or None, capath or None)
|
|
137
151
|
|
|
138
152
|
|
|
139
|
-
def
|
|
140
|
-
"""
|
|
153
|
+
def default_store_is_empty(env: dict | None = None) -> bool:
|
|
154
|
+
"""True when this interpreter trusts no certificate authority at all.
|
|
155
|
+
|
|
156
|
+
Distinct from a corporate-network failure and far more common than it looks:
|
|
157
|
+
a python.org macOS interpreter whose ``Install Certificates.command`` was
|
|
158
|
+
never run reports ``cafile=None`` and loads zero anchors, so *every* HTTPS
|
|
159
|
+
request fails, not just ones crossing an inspecting proxy.
|
|
160
|
+
|
|
161
|
+
Zero is the trigger, deliberately — not a threshold. A small store may be a
|
|
162
|
+
legitimate pinned bundle; an empty one cannot verify anything and is always
|
|
163
|
+
a broken or unconfigured interpreter.
|
|
164
|
+
|
|
165
|
+
A populated ``capath`` disqualifies the interpreter from this diagnosis even
|
|
166
|
+
when the count reads zero: OpenSSL loads a hashed directory lazily, so
|
|
167
|
+
``get_ca_certs()`` reports nothing until a certificate from it has been used.
|
|
168
|
+
Such an interpreter may well be verifying fine, and calling it empty would
|
|
169
|
+
both widen its trust and tell an adopter behind a real proxy that their
|
|
170
|
+
problem is something else.
|
|
171
|
+
"""
|
|
172
|
+
# One try around everything: resolve_trust_paths raises CatalogueError (a
|
|
173
|
+
# ValueError) on a bundle path that vanished between the caller's first
|
|
174
|
+
# attempt and this check, and this helper is called from inside an `except`
|
|
175
|
+
# block where an escape would mask the original error.
|
|
176
|
+
try:
|
|
177
|
+
capath = resolve_trust_paths(env)[1] or ssl.get_default_verify_paths().capath
|
|
178
|
+
if capath:
|
|
179
|
+
with contextlib.suppress(OSError):
|
|
180
|
+
if any(Path(capath).iterdir()):
|
|
181
|
+
return False
|
|
182
|
+
return not build_context(env).get_ca_certs()
|
|
183
|
+
except (OSError, ssl.SSLError, ValueError):
|
|
184
|
+
return False
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def system_anchor_pem(*, include_public_roots: bool = False) -> str | None:
|
|
188
|
+
"""Return operating-system keychain certificates as PEM text, or ``None``.
|
|
189
|
+
|
|
190
|
+
Reads the administrator keychain. When *include_public_roots* is set — which
|
|
191
|
+
the caller decides by asking ``default_store_is_empty`` — Apple's root
|
|
192
|
+
program is read as well, because an interpreter that trusts nothing cannot be
|
|
193
|
+
repaired from private roots alone.
|
|
141
194
|
|
|
142
195
|
macOS only, because it is the only platform where Python does not already
|
|
143
196
|
consult the operating system's trust store — see the module docstring. Every
|
|
@@ -157,8 +210,23 @@ def system_anchor_pem() -> str | None:
|
|
|
157
210
|
if sys.platform != "darwin":
|
|
158
211
|
return None
|
|
159
212
|
|
|
213
|
+
keychains = _ADMIN_KEYCHAINS
|
|
160
214
|
chunks: list[str] = []
|
|
161
|
-
|
|
215
|
+
|
|
216
|
+
if include_public_roots:
|
|
217
|
+
bundle = Path(_APPLE_TLS_BUNDLE)
|
|
218
|
+
loaded = False
|
|
219
|
+
with contextlib.suppress(OSError):
|
|
220
|
+
text = bundle.read_text(encoding="utf-8", errors="replace")
|
|
221
|
+
if _PEM_MARKER in text:
|
|
222
|
+
chunks.append(text)
|
|
223
|
+
loaded = True
|
|
224
|
+
if not loaded:
|
|
225
|
+
# The export is missing; fall back to the keychain rather than
|
|
226
|
+
# leaving an interpreter that trusts nothing with no route at all.
|
|
227
|
+
keychains = (*_ADMIN_KEYCHAINS, _APPLE_ROOT_KEYCHAIN)
|
|
228
|
+
|
|
229
|
+
for keychain in keychains:
|
|
162
230
|
argv = [_SECURITY_BIN, "find-certificate", "-a", "-p", keychain]
|
|
163
231
|
try:
|
|
164
232
|
out = _RUNNER(argv)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agentbundle
|
|
3
|
-
Version: 0.35.
|
|
3
|
+
Version: 0.35.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
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "agentbundle"
|
|
7
|
-
version = "0.35.
|
|
7
|
+
version = "0.35.2"
|
|
8
8
|
description = "npm for your coding agent. Install packs of skills, subagents, and hooks into any repo, for every major agent."
|
|
9
9
|
requires-python = ">=3.11"
|
|
10
10
|
dependencies = []
|
|
@@ -128,7 +128,7 @@ def test_attempt_one_genuinely_fails_against_an_unknown_authority(
|
|
|
128
128
|
tls_server, tmp_path, monkeypatch
|
|
129
129
|
):
|
|
130
130
|
"""The premise: without the authority, real TLS verification fails."""
|
|
131
|
-
monkeypatch.setattr(system_trust, "system_anchor_pem", lambda: None)
|
|
131
|
+
monkeypatch.setattr(system_trust, "system_anchor_pem", lambda **k: None)
|
|
132
132
|
with pytest.raises(CatalogueError) as exc:
|
|
133
133
|
catalogue._fetch_and_extract(tls_server, tmp_path)
|
|
134
134
|
assert "could not be verified" in str(exc.value)
|
|
@@ -145,7 +145,7 @@ def test_the_fallback_recovers_a_real_failing_handshake(
|
|
|
145
145
|
import agentbundle.system_trust as st
|
|
146
146
|
|
|
147
147
|
original = st.system_anchor_pem
|
|
148
|
-
st.system_anchor_pem = lambda: tls_fixtures["ca_pem"]
|
|
148
|
+
st.system_anchor_pem = lambda **k: tls_fixtures["ca_pem"]
|
|
149
149
|
try:
|
|
150
150
|
catalogue._fetch_and_extract(tls_server, tmp_path)
|
|
151
151
|
finally:
|
|
@@ -166,7 +166,7 @@ def test_a_dirty_dump_still_recovers(tls_server, tls_fixtures, tmp_path):
|
|
|
166
166
|
|
|
167
167
|
garbage = "-----BEGIN CERTIFICATE-----\nnot base64\n-----END CERTIFICATE-----\n"
|
|
168
168
|
original = st.system_anchor_pem
|
|
169
|
-
st.system_anchor_pem = lambda: garbage + tls_fixtures["ca_pem"] + garbage
|
|
169
|
+
st.system_anchor_pem = lambda **k: garbage + tls_fixtures["ca_pem"] + garbage
|
|
170
170
|
try:
|
|
171
171
|
catalogue._fetch_and_extract(tls_server, tmp_path)
|
|
172
172
|
finally:
|
|
@@ -181,7 +181,7 @@ def test_opt_out_refuses_to_recover(tls_server, tls_fixtures, tmp_path, monkeypa
|
|
|
181
181
|
import agentbundle.system_trust as st
|
|
182
182
|
|
|
183
183
|
original = st.system_anchor_pem
|
|
184
|
-
st.system_anchor_pem = lambda: tls_fixtures["ca_pem"]
|
|
184
|
+
st.system_anchor_pem = lambda **k: tls_fixtures["ca_pem"]
|
|
185
185
|
try:
|
|
186
186
|
with pytest.raises(CatalogueError) as exc:
|
|
187
187
|
catalogue._fetch_and_extract(tls_server, tmp_path)
|