apm-cli 0.21.0__tar.gz → 0.22.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {apm_cli-0.21.0/src/apm_cli.egg-info → apm_cli-0.22.0}/PKG-INFO +1 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/pyproject.toml +1 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/codex.py +13 -3
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/bundle/lockfile_enrichment.py +7 -9
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/bundle/plugin_exporter.py +1 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/bundle/unpacker.py +7 -13
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/_apm_yml_writer.py +41 -10
- apm_cli-0.22.0/src/apm_cli/commands/approve.py +505 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/compile/cli.py +141 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/config.py +139 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/deps/cli.py +6 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/install.py +19 -19
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/__init__.py +1 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/doctor.py +80 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/pack.py +3 -20
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/policy.py +21 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/self_update.py +65 -5
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/view.py +140 -13
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/__init__.py +4 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/agents_compiler.py +2 -1
- apm_cli-0.22.0/src/apm_cli/compilation/user_root_context.py +305 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/config.py +125 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/experimental.py +2 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/target_detection.py +30 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/dependency_graph.py +13 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/installed_package.py +4 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/lockfile.py +69 -13
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/registry/resolver.py +11 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/artifactory_resolver.py +7 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/context.py +15 -6
- apm_cli-0.22.0/src/apm_cli/install/deployed_paths.py +70 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/drift.py +6 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/exec_gate.py +36 -8
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/local_bundle_handler.py +2 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/cleanup.py +24 -3
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/finalize.py +69 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/integrate.py +68 -21
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/lockfile.py +18 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/resolve.py +17 -7
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/targets.py +16 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/pipeline.py +0 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/plan.py +5 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/request.py +0 -6
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/service.py +0 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/services.py +122 -110
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/skill_path_migration.py +6 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/sources.py +39 -2
- apm_cli-0.22.0/src/apm_cli/install/target_filter.py +33 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/template.py +59 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/agent_integrator.py +15 -5
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/base_integrator.py +95 -14
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/canvas_integrator.py +17 -16
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/command_integrator.py +5 -1
- apm_cli-0.22.0/src/apm_cli/integration/hook_file_routing.py +120 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/hook_integrator.py +77 -65
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/instruction_integrator.py +19 -9
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/kiro_hook_integrator.py +10 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/lsp_integrator.py +3 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/mcp_integrator.py +5 -4
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/prompt_integrator.py +5 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/skill_integrator.py +23 -19
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/skill_transformer.py +2 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/targets.py +14 -4
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/builder.py +30 -11
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/client.py +170 -10
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/models.py +6 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/resolver.py +32 -3
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/dependency/reference.py +14 -21
- apm_cli-0.22.0/src/apm_cli/models/dependency/subsets.py +94 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/validation.py +1 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/_help_text.py +3 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/discovery.py +226 -11
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/inheritance.py +21 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/models.py +1 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/parser.py +49 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/policy_checks.py +78 -10
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/schema.py +38 -0
- apm_cli-0.22.0/src/apm_cli/security/executables.py +1157 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/atomic_io.py +25 -2
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/github_host.py +72 -3
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/version_checker.py +42 -12
- {apm_cli-0.21.0 → apm_cli-0.22.0/src/apm_cli.egg-info}/PKG-INFO +1 -1
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli.egg-info/SOURCES.txt +5 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_lockfile.py +242 -0
- apm_cli-0.21.0/src/apm_cli/commands/approve.py +0 -265
- apm_cli-0.21.0/src/apm_cli/security/executables.py +0 -435
- {apm_cli-0.21.0 → apm_cli-0.22.0}/AUTHORS +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/LICENSE +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/NOTICE +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/README.md +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/setup.cfg +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/_mcp_runtime_args.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/antigravity.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/base.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/claude.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/copilot.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/cursor.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/gemini.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/hermes.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/intellij.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/kiro.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/opencode.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/vscode.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/client/windsurf.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/package_manager/base.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/bootstrap_mirror.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/bundle/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/bundle/local_bundle.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/bundle/packer.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/cache/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/cache/git_cache.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/cache/http_cache.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/cache/integrity.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/cache/locking.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/cache/paths.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/cache/url_normalize.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/cli.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/_helpers.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/audit.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/cache.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/compile/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/compile/watcher.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/deps/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/deps/_utils.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/deps/why.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/doctor.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/experimental.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/find.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/init.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/list_cmd.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/lock.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/audit.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/check.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/init.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/migrate.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/outdated.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/plugin/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/plugin/add.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/plugin/remove.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/plugin/set.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/marketplace/validate.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/mcp.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/outdated.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/plugin/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/plugin/init.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/prune.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/publish.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/run.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/runtime.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/targets.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/uninstall/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/uninstall/cli.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/uninstall/engine.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/commands/update.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/build_id.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/claude_formatter.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/constants.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/constitution.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/constitution_block.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/context_optimizer.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/distributed_compiler.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/gemini_formatter.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/injector.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/link_resolver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/managed_section.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/output_writer.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/compilation/template_builder.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/constants.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/apm_yml.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/auth.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/azure_cli.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/build_orchestrator.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/command_logger.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/conflict_detector.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/docker_args.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/errors.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/install_audit.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/null_logger.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/operations.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/plugin_manifest.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/safe_installer.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/scope.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/script_runner.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/core/token_manager.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/_shared.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/aggregator.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/apm_resolver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/artifactory_entry.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/artifactory_orchestrator.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/bare_cache.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/clone_engine.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/download_strategies.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/git_auth_env.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/git_file_transport.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/git_reference_resolver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/git_remote_ops.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/git_semver_resolver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/github_downloader.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/github_downloader_validation.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/host_backends.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/outdated_row.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/package_validator.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/path_anchoring.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/plugin_parser.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/registry/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/registry/auth.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/registry/client.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/registry/config_loader.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/registry/extractor.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/registry/feature_gate.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/registry/outdated.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/registry/semver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/registry_proxy.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/revision_pins.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/shared_clone_cache.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/tiered_ref_resolver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/transport_selection.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/verifier.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/deps/why_walker.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/drift.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/export/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/export/authoring.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/export/declared_license.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/export/formats.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/export/purl.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/export/sbom.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/export/spdx.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/export/spdx_data.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/factory.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/cache_pin.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/errors.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/gitlab_resolver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/heals/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/heals/base.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/heals/branch_ref_drift.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/heals/buggy_lockfile_recovery.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/helpers/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/helpers/security_scan.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/insecure_policy.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/integrity.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/lsp/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/lsp/integration.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/manifest_reconcile.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/mcp/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/mcp/args.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/mcp/command.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/mcp/conflicts.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/mcp/entry.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/mcp/registry.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/mcp/warnings.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/mcp/writer.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/package_resolution.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/package_selection.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/_redownload.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/_skip_logic.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/audit.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/download.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/heal.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/local_content.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/policy_gate.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/policy_target_check.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/phases/post_deps_local.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/presentation/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/presentation/dry_run.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/registry_wiring.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/root_redirect.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/summary.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/install/validation.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/_shared.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/cleanup.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/copilot_app_db.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/copilot_app_project.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/copilot_app_workflow_integrator.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/copilot_app_ws.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/copilot_cowork_paths.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/coverage.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/dispatch.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/mcp_integrator_install.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/opencode_frontmatter.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/integration/utils.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/_git_utils.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/_io.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/_shared.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/audit.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/auth_helpers.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/diagnostics.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/drift_check.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/errors.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/git_stderr.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/init_template.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/migration.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/output_mappers.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/output_profiles.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/ref_resolver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/registry.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/semver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/shadow_detector.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/tag_pattern.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/validator.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/version_check.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/version_pins.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/version_resolver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/yml_editor.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/marketplace/yml_schema.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/apm_package.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/dependency/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/dependency/identity.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/dependency/lsp.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/dependency/mcp.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/dependency/types.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/format_detection.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/plugin.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/models/results.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/output/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/output/formatters.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/output/models.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/output/script_formatters.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/_constraint_pinning.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/_shared.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/ci_checks.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/install_preflight.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/matcher.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/outcome_routing.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/policy/project_config.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/primitives/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/primitives/discovery.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/primitives/models.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/primitives/parser.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/registry/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/registry/client.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/registry/integration.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/registry/operations.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/runtime/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/runtime/base.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/runtime/codex_runtime.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/runtime/copilot_runtime.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/runtime/factory.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/runtime/llm_runtime.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/runtime/manager.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/runtime/utils.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/audit_report.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/content_scanner.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/external/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/external/base.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/external/gate.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/external/generic_sarif.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/external/options.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/external/registry.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/external/runner.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/external/sarif_ingest.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/external/skillspector.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/file_scanner.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/security/gate.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/update_policy.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/archive.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/console.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/content_hash.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/diagnostics.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/exclude.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/file_ops.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/git_env.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/git_sparse.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/guards.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/helpers.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/install_tui.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/normalization.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/path_security.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/paths.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/patterns.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/perf_stats.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/reflink.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/short_sha.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/subprocess_env.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/utils/yaml_io.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/version.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/workflow/__init__.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/workflow/discovery.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/workflow/parser.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli/workflow/runner.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli.egg-info/dependency_links.txt +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli.egg-info/entry_points.txt +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli.egg-info/requires.txt +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/src/apm_cli.egg-info/top_level.txt +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_apm_package_models.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_apm_resolver.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_codex_docker_args_fix.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_codex_empty_string_and_defaults.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_collision_integration.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_console.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_distributed_compilation.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_empty_string_and_defaults.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_enhanced_discovery.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_github_downloader.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_github_downloader_token_precedence.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_gitlab_git_transport.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_runnable_prompts.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_runtime_manager_token_precedence.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_token_manager.py +0 -0
- {apm_cli-0.21.0 → apm_cli-0.22.0}/tests/test_virtual_package_multi_install.py +0 -0
|
@@ -10,6 +10,7 @@ import toml
|
|
|
10
10
|
from ...registry.client import SimpleRegistryClient
|
|
11
11
|
from ...registry.integration import RegistryIntegration
|
|
12
12
|
from ...utils.console import _rich_success, _rich_warning
|
|
13
|
+
from ...utils.path_security import PathTraversalError
|
|
13
14
|
from ._mcp_runtime_args import process_v01_value_hint_arg
|
|
14
15
|
from .base import MCPClientAdapter
|
|
15
16
|
|
|
@@ -49,13 +50,22 @@ class CodexClientAdapter(MCPClientAdapter):
|
|
|
49
50
|
self.registry_client = SimpleRegistryClient(registry_url)
|
|
50
51
|
self.registry_integration = RegistryIntegration(registry_url)
|
|
51
52
|
|
|
52
|
-
def _get_codex_dir(self):
|
|
53
|
+
def _get_codex_dir(self) -> Path:
|
|
53
54
|
"""Return the root directory used for Codex config in the current scope."""
|
|
54
55
|
if self.user_scope:
|
|
56
|
+
codex_home = os.environ.get("CODEX_HOME", "")
|
|
57
|
+
if codex_home.strip():
|
|
58
|
+
codex_home_path = Path(codex_home).expanduser()
|
|
59
|
+
if not codex_home_path.is_absolute():
|
|
60
|
+
raise PathTraversalError(
|
|
61
|
+
"CODEX_HOME is set to a non-absolute path; cannot locate the "
|
|
62
|
+
"Codex CLI configuration directory."
|
|
63
|
+
)
|
|
64
|
+
return codex_home_path
|
|
55
65
|
return Path.home() / ".codex"
|
|
56
66
|
return self.project_root / ".codex"
|
|
57
67
|
|
|
58
|
-
def get_config_path(self):
|
|
68
|
+
def get_config_path(self) -> str:
|
|
59
69
|
"""Get the path to the Codex CLI MCP configuration file.
|
|
60
70
|
|
|
61
71
|
Returns:
|
|
@@ -322,7 +332,7 @@ class CodexClientAdapter(MCPClientAdapter):
|
|
|
322
332
|
all_args = processed_runtime_args + processed_package_args
|
|
323
333
|
if all_args:
|
|
324
334
|
# If runtime_arguments already include the package (bare or
|
|
325
|
-
# versioned), use them as-is
|
|
335
|
+
# versioned), use them as-is -- they are authoritative from
|
|
326
336
|
# the registry and may carry a version pin.
|
|
327
337
|
has_pkg = any(
|
|
328
338
|
a == package_name or a.startswith(f"{package_name}@") for a in all_args
|
|
@@ -13,12 +13,10 @@ from ..integration.targets import KNOWN_TARGETS
|
|
|
13
13
|
# .github/ is the canonical interop prefix -- install always creates it, so
|
|
14
14
|
# all non-github targets map FROM .github/. The copilot target additionally
|
|
15
15
|
# maps FROM .claude/ for the common case of Claude-first projects packing
|
|
16
|
-
# for Copilot. Cursor
|
|
17
|
-
#
|
|
18
|
-
#
|
|
19
|
-
#
|
|
20
|
-
# into the windsurf skill envelope), so .github/agents/ maps to
|
|
21
|
-
# .windsurf/skills/.
|
|
16
|
+
# for Copilot. Cursor, opencode, and windsurf skills converge on the
|
|
17
|
+
# shared .agents/skills/ convention rather than bespoke per-target paths.
|
|
18
|
+
# Windsurf agents still collapse into .windsurf/skills/ because the target
|
|
19
|
+
# has no distinct agent envelope.
|
|
22
20
|
_CROSS_TARGET_MAPS: dict[str, dict[str, str]] = {
|
|
23
21
|
"claude": {
|
|
24
22
|
".github/skills/": ".claude/skills/",
|
|
@@ -33,11 +31,11 @@ _CROSS_TARGET_MAPS: dict[str, dict[str, str]] = {
|
|
|
33
31
|
".claude/agents/": ".github/agents/",
|
|
34
32
|
},
|
|
35
33
|
"cursor": {
|
|
36
|
-
".github/skills/": ".
|
|
34
|
+
".github/skills/": ".agents/skills/",
|
|
37
35
|
".github/agents/": ".cursor/agents/",
|
|
38
36
|
},
|
|
39
37
|
"opencode": {
|
|
40
|
-
".github/skills/": ".
|
|
38
|
+
".github/skills/": ".agents/skills/",
|
|
41
39
|
".github/agents/": ".opencode/agents/",
|
|
42
40
|
},
|
|
43
41
|
"codex": {
|
|
@@ -45,7 +43,7 @@ _CROSS_TARGET_MAPS: dict[str, dict[str, str]] = {
|
|
|
45
43
|
".github/agents/": ".codex/agents/",
|
|
46
44
|
},
|
|
47
45
|
"windsurf": {
|
|
48
|
-
".github/skills/": ".
|
|
46
|
+
".github/skills/": ".agents/skills/",
|
|
49
47
|
".github/agents/": ".windsurf/skills/",
|
|
50
48
|
},
|
|
51
49
|
"agent-skills": {
|
|
@@ -111,7 +111,7 @@ def _collect_apm_components(apm_dir: Path) -> list[tuple[Path, str]]:
|
|
|
111
111
|
# extensions/ -> extensions/ (canvas extensions, experimental Copilot-only).
|
|
112
112
|
# Preserved verbatim so an offline bundle can carry a canvas; the files are
|
|
113
113
|
# inert until the consumer enables the ``canvas`` experimental flag AND
|
|
114
|
-
#
|
|
114
|
+
# approves the package via allowExecutables / ``apm approve`` at install time.
|
|
115
115
|
_collect_recursive(apm_dir / "extensions", "extensions", components)
|
|
116
116
|
|
|
117
117
|
return components
|
|
@@ -40,7 +40,6 @@ def unpack_bundle(
|
|
|
40
40
|
skip_verify: bool = False,
|
|
41
41
|
dry_run: bool = False,
|
|
42
42
|
force: bool = False,
|
|
43
|
-
trust_canvas: bool = False,
|
|
44
43
|
) -> UnpackResult:
|
|
45
44
|
"""Extract and apply an APM bundle to a project directory.
|
|
46
45
|
|
|
@@ -54,10 +53,6 @@ def unpack_bundle(
|
|
|
54
53
|
skip_verify: If *True*, skip completeness verification against the lockfile.
|
|
55
54
|
dry_run: If *True*, resolve the file list but write nothing to disk.
|
|
56
55
|
force: If *True*, deploy even when critical hidden characters are found.
|
|
57
|
-
trust_canvas: If *True*, allow executable canvas extension files
|
|
58
|
-
(``.github/extensions/<name>/extension.mjs``) to be unpacked.
|
|
59
|
-
Defaults to *False* (fail closed) so a vendored bundle cannot
|
|
60
|
-
smuggle executable canvas code past the trust gate.
|
|
61
56
|
|
|
62
57
|
Returns:
|
|
63
58
|
:class:`UnpackResult` describing what was (or would be) extracted.
|
|
@@ -170,18 +165,17 @@ def unpack_bundle(
|
|
|
170
165
|
dep_file_map[dep_key] = dep_files
|
|
171
166
|
|
|
172
167
|
# Security + feature gate: canvas extensions are executable Node
|
|
173
|
-
# bundles (``extension.mjs``). ``apm unpack`` copies
|
|
174
|
-
# verbatim WITHOUT routing through ``CanvasIntegrator
|
|
175
|
-
# the
|
|
176
|
-
#
|
|
177
|
-
#
|
|
178
|
-
#
|
|
179
|
-
# either gate is missing.
|
|
168
|
+
# bundles (``extension.mjs``). ``apm unpack`` (deprecated) copies
|
|
169
|
+
# deployed files verbatim WITHOUT routing through ``CanvasIntegrator``.
|
|
170
|
+
# When the canvas feature flag is OFF, drop paths silently.
|
|
171
|
+
# When ON, canvas files are allowed (apm unpack has no project context
|
|
172
|
+
# so no allowExecutables enforcement is available; the user is assumed
|
|
173
|
+
# to understand what they are unpacking for this deprecated command).
|
|
180
174
|
canvas_blocked = 0
|
|
181
175
|
from ..core.experimental import is_enabled
|
|
182
176
|
from ..integration.canvas_integrator import is_canvas_bundle_path
|
|
183
177
|
|
|
184
|
-
if not
|
|
178
|
+
if not is_enabled("canvas"):
|
|
185
179
|
_blocked = {f for f in unique_files if is_canvas_bundle_path(f)}
|
|
186
180
|
if _blocked:
|
|
187
181
|
canvas_blocked = len(_blocked)
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
"""Write-back
|
|
1
|
+
"""Write-back helpers for persisting dependency subset selection in apm.yml.
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
field. Keeps write-back logic isolated and unit-testable.
|
|
3
|
+
The helpers promote entries to dict form and set/clear the ``skills:`` or
|
|
4
|
+
``targets:`` fields. Keeping write-back logic isolated makes it unit-testable.
|
|
6
5
|
"""
|
|
7
6
|
|
|
8
7
|
from pathlib import Path
|
|
@@ -23,6 +22,31 @@ def set_skill_subset_for_entry(
|
|
|
23
22
|
|
|
24
23
|
Returns True if file was modified.
|
|
25
24
|
"""
|
|
25
|
+
return _set_subset_for_entry(manifest_path, repo_url, "skills", subset)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def set_target_subset_for_entry(
|
|
29
|
+
manifest_path: Path,
|
|
30
|
+
repo_url: str,
|
|
31
|
+
subset: list[str] | None,
|
|
32
|
+
) -> bool:
|
|
33
|
+
"""Promote entry to dict form and set/clear targets: field.
|
|
34
|
+
|
|
35
|
+
subset=None or empty list -> remove targets: from entry (reset to all).
|
|
36
|
+
subset=[...] -> set targets: to sorted+deduped lowercase list.
|
|
37
|
+
|
|
38
|
+
Returns True if file was modified.
|
|
39
|
+
"""
|
|
40
|
+
return _set_subset_for_entry(manifest_path, repo_url, "targets", subset)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def _set_subset_for_entry(
|
|
44
|
+
manifest_path: Path,
|
|
45
|
+
repo_url: str,
|
|
46
|
+
field: str,
|
|
47
|
+
subset: list[str] | None,
|
|
48
|
+
) -> bool:
|
|
49
|
+
"""Promote a matching entry to dict form and set/clear one subset field."""
|
|
26
50
|
data = load_yaml(manifest_path) or {}
|
|
27
51
|
deps_section = data.get("dependencies")
|
|
28
52
|
if deps_section is None:
|
|
@@ -45,7 +69,7 @@ def set_skill_subset_for_entry(
|
|
|
45
69
|
|
|
46
70
|
for entry in apm_deps:
|
|
47
71
|
if _entry_matches(entry, repo_url):
|
|
48
|
-
entry = _apply_subset(entry, subset)
|
|
72
|
+
entry = _apply_subset(entry, field, subset)
|
|
49
73
|
modified = True
|
|
50
74
|
new_deps.append(entry)
|
|
51
75
|
|
|
@@ -72,8 +96,13 @@ def _entry_matches(entry, repo_url: str) -> bool:
|
|
|
72
96
|
return False
|
|
73
97
|
|
|
74
98
|
|
|
75
|
-
def _apply_subset(entry, subset: list[str] | None):
|
|
76
|
-
"""Apply
|
|
99
|
+
def _apply_subset(entry, field: str | list[str] | None, subset: list[str] | None = None):
|
|
100
|
+
"""Apply a dependency subset field, promoting to dict form if needed."""
|
|
101
|
+
# Compatibility for older direct tests that called _apply_subset(entry, subset).
|
|
102
|
+
if not isinstance(field, str):
|
|
103
|
+
subset = field
|
|
104
|
+
field = "skills"
|
|
105
|
+
|
|
77
106
|
# Parse current entry to get canonical info
|
|
78
107
|
if isinstance(entry, str):
|
|
79
108
|
ref = DependencyReference.parse(entry)
|
|
@@ -83,9 +112,11 @@ def _apply_subset(entry, subset: list[str] | None):
|
|
|
83
112
|
return entry
|
|
84
113
|
|
|
85
114
|
# Determine if we should set or clear
|
|
86
|
-
if
|
|
87
|
-
ref.skill_subset = sorted(set(subset))
|
|
115
|
+
if field == "skills":
|
|
116
|
+
ref.skill_subset = sorted(set(subset)) if subset else None
|
|
117
|
+
elif field == "targets":
|
|
118
|
+
ref.target_subset = sorted({name.strip().lower() for name in subset}) if subset else None
|
|
88
119
|
else:
|
|
89
|
-
|
|
120
|
+
raise ValueError(f"Unsupported dependency subset field: {field}")
|
|
90
121
|
|
|
91
122
|
return ref.to_apm_yml_entry()
|