apm-cli 0.9.1__tar.gz → 0.9.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.
- {apm_cli-0.9.1/src/apm_cli.egg-info → apm_cli-0.9.2}/PKG-INFO +31 -6
- {apm_cli-0.9.1 → apm_cli-0.9.2}/README.md +30 -5
- {apm_cli-0.9.1 → apm_cli-0.9.2}/pyproject.toml +1 -1
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/install.py +19 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/auth.py +354 -34
- apm_cli-0.9.2/src/apm_cli/core/azure_cli.py +311 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/token_manager.py +5 -1
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/github_downloader.py +176 -12
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/validation.py +52 -3
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/github_host.py +49 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2/src/apm_cli.egg-info}/PKG-INFO +31 -6
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli.egg-info/SOURCES.txt +1 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/AUTHORS +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/LICENSE +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/setup.cfg +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/base.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/codex.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/copilot.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/cursor.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/opencode.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/vscode.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/package_manager/base.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/bundle/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/bundle/lockfile_enrichment.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/bundle/packer.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/bundle/plugin_exporter.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/bundle/unpacker.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/cli.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/_helpers.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/audit.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/compile/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/compile/cli.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/compile/watcher.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/config.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/deps/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/deps/_utils.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/deps/cli.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/init.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/list_cmd.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/marketplace.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/mcp.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/outdated.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/pack.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/policy.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/prune.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/run.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/runtime.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/uninstall/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/uninstall/cli.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/uninstall/engine.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/update.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/view.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/agents_compiler.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/claude_formatter.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/constants.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/constitution.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/constitution_block.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/context_optimizer.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/distributed_compiler.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/injector.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/link_resolver.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/template_builder.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/config.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/constants.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/command_logger.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/conflict_detector.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/docker_args.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/operations.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/safe_installer.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/scope.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/script_runner.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/target_detection.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/aggregator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/apm_resolver.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/artifactory_entry.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/collection_parser.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/dependency_graph.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/installed_package.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/lockfile.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/package_validator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/plugin_parser.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/registry_proxy.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/transport_selection.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/verifier.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/drift.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/factory.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/context.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/errors.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/helpers/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/helpers/security_scan.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/insecure_policy.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/mcp_registry.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/mcp_warnings.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/cleanup.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/download.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/finalize.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/integrate.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/local_content.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/lockfile.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/policy_gate.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/policy_target_check.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/post_deps_local.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/resolve.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/targets.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/pipeline.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/presentation/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/presentation/dry_run.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/request.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/service.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/services.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/sources.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/template.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/agent_integrator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/base_integrator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/cleanup.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/command_integrator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/coverage.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/dispatch.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/hook_integrator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/instruction_integrator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/mcp_integrator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/prompt_integrator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/skill_integrator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/skill_transformer.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/targets.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/utils.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/client.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/errors.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/models.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/registry.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/resolver.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/shadow_detector.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/validator.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/version_pins.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/apm_package.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/dependency/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/dependency/mcp.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/dependency/reference.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/dependency/types.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/plugin.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/results.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/validation.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/output/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/output/formatters.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/output/models.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/output/script_formatters.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/ci_checks.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/discovery.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/inheritance.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/install_preflight.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/matcher.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/models.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/outcome_routing.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/parser.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/policy_checks.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/project_config.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/schema.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/primitives/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/primitives/discovery.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/primitives/models.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/primitives/parser.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/registry/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/registry/client.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/registry/integration.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/registry/operations.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/base.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/codex_runtime.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/copilot_runtime.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/factory.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/llm_runtime.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/manager.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/security/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/security/audit_report.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/security/content_scanner.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/security/file_scanner.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/security/gate.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/update_policy.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/console.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/content_hash.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/diagnostics.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/exclude.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/file_ops.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/helpers.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/path_security.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/paths.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/version_checker.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/yaml_io.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/version.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/workflow/__init__.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/workflow/discovery.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/workflow/parser.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/workflow/runner.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli.egg-info/dependency_links.txt +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli.egg-info/entry_points.txt +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli.egg-info/requires.txt +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli.egg-info/top_level.txt +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_apm_package_models.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_apm_resolver.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_codex_docker_args_fix.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_codex_empty_string_and_defaults.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_collision_integration.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_console.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_distributed_compilation.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_empty_string_and_defaults.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_enhanced_discovery.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_github_downloader.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_github_downloader_token_precedence.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_lockfile.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_runnable_prompts.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_runtime_manager_token_precedence.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_token_manager.py +0 -0
- {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_virtual_package_multi_install.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: apm-cli
|
|
3
|
-
Version: 0.9.
|
|
3
|
+
Version: 0.9.2
|
|
4
4
|
Summary: MCP configuration tool
|
|
5
5
|
Author-email: Daniel Meppiel <user@example.com>
|
|
6
6
|
License: MIT License
|
|
@@ -70,6 +70,11 @@ GitHub Copilot · Claude Code · Cursor · OpenCode · Codex
|
|
|
70
70
|
|
|
71
71
|
**[Documentation](https://microsoft.github.io/apm/)** · **[Quick Start](https://microsoft.github.io/apm/getting-started/quick-start/)** · **[CLI Reference](https://microsoft.github.io/apm/reference/cli-commands/)**
|
|
72
72
|
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
> **Portable by manifest. Secure by default. Governed by policy.**
|
|
76
|
+
> One file describes every agent's context; one command reproduces it everywhere; one policy controls what an org will allow.
|
|
77
|
+
|
|
73
78
|
## Why APM
|
|
74
79
|
|
|
75
80
|
AI coding agents need context to be useful — standards, prompts, skills, plugins — but today every developer sets this up manually. Nothing is portable nor reproducible. There's no manifest for it.
|
|
@@ -101,17 +106,37 @@ git clone <org/repo> && cd <repo>
|
|
|
101
106
|
apm install # every agent is configured
|
|
102
107
|
```
|
|
103
108
|
|
|
104
|
-
##
|
|
109
|
+
## The three promises
|
|
105
110
|
|
|
106
|
-
|
|
111
|
+
### 1. Portable by manifest
|
|
112
|
+
|
|
113
|
+
One `apm.yml` describes every primitive your agents need — instructions, skills, prompts, agents, hooks, plugins, MCP servers — and `apm install` reproduces the exact same setup across every client on every machine. `apm.lock.yaml` pins the resolved tree the way `package-lock.json` does for npm.
|
|
114
|
+
|
|
115
|
+
- **[One manifest for everything](https://microsoft.github.io/apm/reference/primitive-types/)** — declared once, deployed across Copilot, Claude, Cursor, OpenCode, Codex
|
|
107
116
|
- **[Install from anywhere](https://microsoft.github.io/apm/guides/dependencies/)** — GitHub, GitLab, Bitbucket, Azure DevOps, GitHub Enterprise, any git host
|
|
108
117
|
- **[Transitive dependencies](https://microsoft.github.io/apm/guides/dependencies/)** — packages can depend on packages; APM resolves the full tree
|
|
109
|
-
- **[
|
|
110
|
-
- **[
|
|
111
|
-
- **[Marketplaces](https://microsoft.github.io/apm/guides/marketplaces/)** — install plugins from curated registries in one command; deployed across all targets, locked, scanned, and [governed by `apm-policy.yaml`](https://microsoft.github.io/apm/enterprise/security/)
|
|
118
|
+
- **[Author plugins](https://microsoft.github.io/apm/guides/plugins/)** — build Copilot, Claude, and Cursor plugins with dependency management, then export standard `plugin.json`
|
|
119
|
+
- **[Marketplaces](https://microsoft.github.io/apm/guides/marketplaces/)** — install plugins from curated registries in one command, deployed across all targets and locked
|
|
112
120
|
- **[Pack & distribute](https://microsoft.github.io/apm/guides/pack-distribute/)** — `apm pack` bundles your configuration as a zipped package or a standalone plugin
|
|
113
121
|
- **[CI/CD ready](https://github.com/microsoft/apm-action)** — GitHub Action for automated workflows
|
|
114
122
|
|
|
123
|
+
### 2. Secure by default
|
|
124
|
+
|
|
125
|
+
Agent context is executable in effect — a prompt is a program for an LLM. APM treats it that way. Every install scans for hidden Unicode that can hijack agent behavior; the lockfile pins integrity hashes; transitive MCP servers are gated by trust prompts.
|
|
126
|
+
|
|
127
|
+
- **[Content security](https://microsoft.github.io/apm/enterprise/security/)** — `apm install` blocks compromised packages before agents read them; `apm audit` runs the same checks on demand
|
|
128
|
+
- **[Lockfile integrity](https://microsoft.github.io/apm/enterprise/governance/)** — `apm.lock` records resolved sources and content hashes for full provenance
|
|
129
|
+
- **[MCP trust boundaries](https://microsoft.github.io/apm/guides/mcp-servers/)** — transitive MCP servers require explicit consent
|
|
130
|
+
|
|
131
|
+
### 3. Governed by policy
|
|
132
|
+
|
|
133
|
+
`apm-policy.yml` lets a security team say *"these are the only sources, scopes, and primitives this org will allow"* and have every `apm install` enforce it — with tighten-only inheritance from enterprise to org to repo, a published bypass contract, and audit-mode CI gates.
|
|
134
|
+
|
|
135
|
+
- **[Governance Guide](https://microsoft.github.io/apm/enterprise/governance-guide/)** — the canonical enterprise reference: enforcement points, bypass contract, air-gapped story, failure semantics, rollout playbook
|
|
136
|
+
- **[Policy reference](https://microsoft.github.io/apm/enterprise/policy-reference/)** — every check, every field, every default
|
|
137
|
+
- **[Adoption playbook](https://microsoft.github.io/apm/enterprise/adoption-playbook/)** — staged rollout from warn to block across hundreds of repos
|
|
138
|
+
- **[GitHub rulesets integration](https://microsoft.github.io/apm/integrations/github-rulesets/)** — wire `apm audit --ci` into branch protection
|
|
139
|
+
|
|
115
140
|
## Get Started
|
|
116
141
|
|
|
117
142
|
#### Linux / macOS
|
|
@@ -8,6 +8,11 @@ GitHub Copilot · Claude Code · Cursor · OpenCode · Codex
|
|
|
8
8
|
|
|
9
9
|
**[Documentation](https://microsoft.github.io/apm/)** · **[Quick Start](https://microsoft.github.io/apm/getting-started/quick-start/)** · **[CLI Reference](https://microsoft.github.io/apm/reference/cli-commands/)**
|
|
10
10
|
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
> **Portable by manifest. Secure by default. Governed by policy.**
|
|
14
|
+
> One file describes every agent's context; one command reproduces it everywhere; one policy controls what an org will allow.
|
|
15
|
+
|
|
11
16
|
## Why APM
|
|
12
17
|
|
|
13
18
|
AI coding agents need context to be useful — standards, prompts, skills, plugins — but today every developer sets this up manually. Nothing is portable nor reproducible. There's no manifest for it.
|
|
@@ -39,17 +44,37 @@ git clone <org/repo> && cd <repo>
|
|
|
39
44
|
apm install # every agent is configured
|
|
40
45
|
```
|
|
41
46
|
|
|
42
|
-
##
|
|
47
|
+
## The three promises
|
|
43
48
|
|
|
44
|
-
|
|
49
|
+
### 1. Portable by manifest
|
|
50
|
+
|
|
51
|
+
One `apm.yml` describes every primitive your agents need — instructions, skills, prompts, agents, hooks, plugins, MCP servers — and `apm install` reproduces the exact same setup across every client on every machine. `apm.lock.yaml` pins the resolved tree the way `package-lock.json` does for npm.
|
|
52
|
+
|
|
53
|
+
- **[One manifest for everything](https://microsoft.github.io/apm/reference/primitive-types/)** — declared once, deployed across Copilot, Claude, Cursor, OpenCode, Codex
|
|
45
54
|
- **[Install from anywhere](https://microsoft.github.io/apm/guides/dependencies/)** — GitHub, GitLab, Bitbucket, Azure DevOps, GitHub Enterprise, any git host
|
|
46
55
|
- **[Transitive dependencies](https://microsoft.github.io/apm/guides/dependencies/)** — packages can depend on packages; APM resolves the full tree
|
|
47
|
-
- **[
|
|
48
|
-
- **[
|
|
49
|
-
- **[Marketplaces](https://microsoft.github.io/apm/guides/marketplaces/)** — install plugins from curated registries in one command; deployed across all targets, locked, scanned, and [governed by `apm-policy.yaml`](https://microsoft.github.io/apm/enterprise/security/)
|
|
56
|
+
- **[Author plugins](https://microsoft.github.io/apm/guides/plugins/)** — build Copilot, Claude, and Cursor plugins with dependency management, then export standard `plugin.json`
|
|
57
|
+
- **[Marketplaces](https://microsoft.github.io/apm/guides/marketplaces/)** — install plugins from curated registries in one command, deployed across all targets and locked
|
|
50
58
|
- **[Pack & distribute](https://microsoft.github.io/apm/guides/pack-distribute/)** — `apm pack` bundles your configuration as a zipped package or a standalone plugin
|
|
51
59
|
- **[CI/CD ready](https://github.com/microsoft/apm-action)** — GitHub Action for automated workflows
|
|
52
60
|
|
|
61
|
+
### 2. Secure by default
|
|
62
|
+
|
|
63
|
+
Agent context is executable in effect — a prompt is a program for an LLM. APM treats it that way. Every install scans for hidden Unicode that can hijack agent behavior; the lockfile pins integrity hashes; transitive MCP servers are gated by trust prompts.
|
|
64
|
+
|
|
65
|
+
- **[Content security](https://microsoft.github.io/apm/enterprise/security/)** — `apm install` blocks compromised packages before agents read them; `apm audit` runs the same checks on demand
|
|
66
|
+
- **[Lockfile integrity](https://microsoft.github.io/apm/enterprise/governance/)** — `apm.lock` records resolved sources and content hashes for full provenance
|
|
67
|
+
- **[MCP trust boundaries](https://microsoft.github.io/apm/guides/mcp-servers/)** — transitive MCP servers require explicit consent
|
|
68
|
+
|
|
69
|
+
### 3. Governed by policy
|
|
70
|
+
|
|
71
|
+
`apm-policy.yml` lets a security team say *"these are the only sources, scopes, and primitives this org will allow"* and have every `apm install` enforce it — with tighten-only inheritance from enterprise to org to repo, a published bypass contract, and audit-mode CI gates.
|
|
72
|
+
|
|
73
|
+
- **[Governance Guide](https://microsoft.github.io/apm/enterprise/governance-guide/)** — the canonical enterprise reference: enforcement points, bypass contract, air-gapped story, failure semantics, rollout playbook
|
|
74
|
+
- **[Policy reference](https://microsoft.github.io/apm/enterprise/policy-reference/)** — every check, every field, every default
|
|
75
|
+
- **[Adoption playbook](https://microsoft.github.io/apm/enterprise/adoption-playbook/)** — staged rollout from warn to block across hundreds of repos
|
|
76
|
+
- **[GitHub rulesets integration](https://microsoft.github.io/apm/integrations/github-rulesets/)** — wire `apm audit --ci` into branch protection
|
|
77
|
+
|
|
53
78
|
## Get Started
|
|
54
79
|
|
|
55
80
|
#### Linux / macOS
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""APM install command and dependency installation engine."""
|
|
2
2
|
|
|
3
3
|
import builtins
|
|
4
|
+
import os
|
|
4
5
|
import sys
|
|
5
6
|
from pathlib import Path
|
|
6
7
|
from typing import List, Optional
|
|
@@ -1087,12 +1088,20 @@ def install(ctx, packages, runtime, exclude, only, update, dry_run, force, verbo
|
|
|
1087
1088
|
apm install --mcp api --url https://example.com/mcp # remote http/sse
|
|
1088
1089
|
apm install --mcp fetch -- npx -y @modelcontextprotocol/server-fetch # stdio (post-- argv)
|
|
1089
1090
|
"""
|
|
1091
|
+
# C1 #856: defaults BEFORE try so the finally clause never sees an
|
|
1092
|
+
# UnboundLocalError if InstallLogger(...) raises during construction.
|
|
1093
|
+
_apm_verbose_prev = os.environ.get("APM_VERBOSE")
|
|
1090
1094
|
try:
|
|
1091
1095
|
# Create structured logger for install output early so exception
|
|
1092
1096
|
# handlers can always reference it (avoids UnboundLocalError if
|
|
1093
1097
|
# scope initialisation below throws).
|
|
1094
1098
|
is_partial = bool(packages)
|
|
1095
1099
|
logger = InstallLogger(verbose=verbose, dry_run=dry_run, partial=is_partial)
|
|
1100
|
+
# HACK(#852): surface --verbose to deeper auth layers via env var until
|
|
1101
|
+
# AuthResolver gains a first-class verbose channel. Restored in finally
|
|
1102
|
+
# below to keep the mutation scoped to this command invocation.
|
|
1103
|
+
if verbose:
|
|
1104
|
+
os.environ["APM_VERBOSE"] = "1"
|
|
1096
1105
|
|
|
1097
1106
|
# W2-pkg-rollback (#827): snapshot bytes captured BEFORE
|
|
1098
1107
|
# _validate_and_add_packages_to_apm_yml mutates apm.yml.
|
|
@@ -1273,6 +1282,10 @@ def install(ctx, packages, runtime, exclude, only, update, dry_run, force, verbo
|
|
|
1273
1282
|
# Create shared auth resolver for all downloads in this CLI invocation
|
|
1274
1283
|
# to ensure credentials are cached and reused (prevents duplicate auth popups)
|
|
1275
1284
|
auth_resolver = AuthResolver()
|
|
1285
|
+
# F2/F3 #856: thread the InstallLogger into AuthResolver so the verbose
|
|
1286
|
+
# auth-source line and the deferred stale-PAT [!] warning route through
|
|
1287
|
+
# CommandLogger / DiagnosticCollector instead of stderr/inline writes.
|
|
1288
|
+
auth_resolver.set_logger(logger)
|
|
1276
1289
|
|
|
1277
1290
|
# Check if apm.yml exists
|
|
1278
1291
|
apm_yml_exists = manifest_path.exists()
|
|
@@ -1594,6 +1607,12 @@ def install(ctx, packages, runtime, exclude, only, update, dry_run, force, verbo
|
|
|
1594
1607
|
if not verbose:
|
|
1595
1608
|
logger.progress("Run with --verbose for detailed diagnostics")
|
|
1596
1609
|
sys.exit(1)
|
|
1610
|
+
finally:
|
|
1611
|
+
# HACK(#852) cleanup: restore APM_VERBOSE so it stays scoped to this call.
|
|
1612
|
+
if _apm_verbose_prev is None:
|
|
1613
|
+
os.environ.pop("APM_VERBOSE", None)
|
|
1614
|
+
else:
|
|
1615
|
+
os.environ["APM_VERBOSE"] = _apm_verbose_prev
|
|
1597
1616
|
|
|
1598
1617
|
|
|
1599
1618
|
# ---------------------------------------------------------------------------
|