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.
Files changed (229) hide show
  1. {apm_cli-0.9.1/src/apm_cli.egg-info → apm_cli-0.9.2}/PKG-INFO +31 -6
  2. {apm_cli-0.9.1 → apm_cli-0.9.2}/README.md +30 -5
  3. {apm_cli-0.9.1 → apm_cli-0.9.2}/pyproject.toml +1 -1
  4. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/install.py +19 -0
  5. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/auth.py +354 -34
  6. apm_cli-0.9.2/src/apm_cli/core/azure_cli.py +311 -0
  7. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/token_manager.py +5 -1
  8. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/github_downloader.py +176 -12
  9. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/validation.py +52 -3
  10. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/github_host.py +49 -0
  11. {apm_cli-0.9.1 → apm_cli-0.9.2/src/apm_cli.egg-info}/PKG-INFO +31 -6
  12. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli.egg-info/SOURCES.txt +1 -0
  13. {apm_cli-0.9.1 → apm_cli-0.9.2}/AUTHORS +0 -0
  14. {apm_cli-0.9.1 → apm_cli-0.9.2}/LICENSE +0 -0
  15. {apm_cli-0.9.1 → apm_cli-0.9.2}/setup.cfg +0 -0
  16. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/__init__.py +0 -0
  17. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/__init__.py +0 -0
  18. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/__init__.py +0 -0
  19. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/base.py +0 -0
  20. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/codex.py +0 -0
  21. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/copilot.py +0 -0
  22. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/cursor.py +0 -0
  23. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/opencode.py +0 -0
  24. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/client/vscode.py +0 -0
  25. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
  26. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/package_manager/base.py +0 -0
  27. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
  28. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/bundle/__init__.py +0 -0
  29. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/bundle/lockfile_enrichment.py +0 -0
  30. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/bundle/packer.py +0 -0
  31. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/bundle/plugin_exporter.py +0 -0
  32. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/bundle/unpacker.py +0 -0
  33. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/cli.py +0 -0
  34. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/__init__.py +0 -0
  35. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/_helpers.py +0 -0
  36. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/audit.py +0 -0
  37. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/compile/__init__.py +0 -0
  38. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/compile/cli.py +0 -0
  39. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/compile/watcher.py +0 -0
  40. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/config.py +0 -0
  41. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/deps/__init__.py +0 -0
  42. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/deps/_utils.py +0 -0
  43. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/deps/cli.py +0 -0
  44. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/init.py +0 -0
  45. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/list_cmd.py +0 -0
  46. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/marketplace.py +0 -0
  47. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/mcp.py +0 -0
  48. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/outdated.py +0 -0
  49. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/pack.py +0 -0
  50. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/policy.py +0 -0
  51. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/prune.py +0 -0
  52. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/run.py +0 -0
  53. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/runtime.py +0 -0
  54. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/uninstall/__init__.py +0 -0
  55. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/uninstall/cli.py +0 -0
  56. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/uninstall/engine.py +0 -0
  57. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/update.py +0 -0
  58. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/commands/view.py +0 -0
  59. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/__init__.py +0 -0
  60. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/agents_compiler.py +0 -0
  61. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/claude_formatter.py +0 -0
  62. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/constants.py +0 -0
  63. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/constitution.py +0 -0
  64. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/constitution_block.py +0 -0
  65. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/context_optimizer.py +0 -0
  66. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/distributed_compiler.py +0 -0
  67. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/injector.py +0 -0
  68. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/link_resolver.py +0 -0
  69. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/compilation/template_builder.py +0 -0
  70. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/config.py +0 -0
  71. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/constants.py +0 -0
  72. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/__init__.py +0 -0
  73. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/command_logger.py +0 -0
  74. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/conflict_detector.py +0 -0
  75. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/docker_args.py +0 -0
  76. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/operations.py +0 -0
  77. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/safe_installer.py +0 -0
  78. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/scope.py +0 -0
  79. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/script_runner.py +0 -0
  80. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/core/target_detection.py +0 -0
  81. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/__init__.py +0 -0
  82. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/aggregator.py +0 -0
  83. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/apm_resolver.py +0 -0
  84. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/artifactory_entry.py +0 -0
  85. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/collection_parser.py +0 -0
  86. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/dependency_graph.py +0 -0
  87. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/installed_package.py +0 -0
  88. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/lockfile.py +0 -0
  89. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/package_validator.py +0 -0
  90. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/plugin_parser.py +0 -0
  91. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/registry_proxy.py +0 -0
  92. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/transport_selection.py +0 -0
  93. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/deps/verifier.py +0 -0
  94. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/drift.py +0 -0
  95. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/factory.py +0 -0
  96. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/__init__.py +0 -0
  97. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/context.py +0 -0
  98. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/errors.py +0 -0
  99. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/helpers/__init__.py +0 -0
  100. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/helpers/security_scan.py +0 -0
  101. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/insecure_policy.py +0 -0
  102. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/mcp_registry.py +0 -0
  103. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/mcp_warnings.py +0 -0
  104. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/__init__.py +0 -0
  105. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/cleanup.py +0 -0
  106. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/download.py +0 -0
  107. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/finalize.py +0 -0
  108. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/integrate.py +0 -0
  109. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/local_content.py +0 -0
  110. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/lockfile.py +0 -0
  111. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/policy_gate.py +0 -0
  112. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/policy_target_check.py +0 -0
  113. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/post_deps_local.py +0 -0
  114. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/resolve.py +0 -0
  115. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/phases/targets.py +0 -0
  116. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/pipeline.py +0 -0
  117. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/presentation/__init__.py +0 -0
  118. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/presentation/dry_run.py +0 -0
  119. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/request.py +0 -0
  120. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/service.py +0 -0
  121. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/services.py +0 -0
  122. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/sources.py +0 -0
  123. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/install/template.py +0 -0
  124. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/__init__.py +0 -0
  125. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/agent_integrator.py +0 -0
  126. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/base_integrator.py +0 -0
  127. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/cleanup.py +0 -0
  128. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/command_integrator.py +0 -0
  129. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/coverage.py +0 -0
  130. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/dispatch.py +0 -0
  131. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/hook_integrator.py +0 -0
  132. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/instruction_integrator.py +0 -0
  133. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/mcp_integrator.py +0 -0
  134. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/prompt_integrator.py +0 -0
  135. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/skill_integrator.py +0 -0
  136. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/skill_transformer.py +0 -0
  137. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/targets.py +0 -0
  138. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/integration/utils.py +0 -0
  139. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/__init__.py +0 -0
  140. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/client.py +0 -0
  141. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/errors.py +0 -0
  142. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/models.py +0 -0
  143. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/registry.py +0 -0
  144. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/resolver.py +0 -0
  145. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/shadow_detector.py +0 -0
  146. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/validator.py +0 -0
  147. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/marketplace/version_pins.py +0 -0
  148. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/__init__.py +0 -0
  149. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/apm_package.py +0 -0
  150. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/dependency/__init__.py +0 -0
  151. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/dependency/mcp.py +0 -0
  152. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/dependency/reference.py +0 -0
  153. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/dependency/types.py +0 -0
  154. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/plugin.py +0 -0
  155. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/results.py +0 -0
  156. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/models/validation.py +0 -0
  157. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/output/__init__.py +0 -0
  158. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/output/formatters.py +0 -0
  159. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/output/models.py +0 -0
  160. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/output/script_formatters.py +0 -0
  161. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/__init__.py +0 -0
  162. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/ci_checks.py +0 -0
  163. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/discovery.py +0 -0
  164. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/inheritance.py +0 -0
  165. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/install_preflight.py +0 -0
  166. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/matcher.py +0 -0
  167. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/models.py +0 -0
  168. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/outcome_routing.py +0 -0
  169. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/parser.py +0 -0
  170. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/policy_checks.py +0 -0
  171. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/project_config.py +0 -0
  172. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/policy/schema.py +0 -0
  173. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/primitives/__init__.py +0 -0
  174. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/primitives/discovery.py +0 -0
  175. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/primitives/models.py +0 -0
  176. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/primitives/parser.py +0 -0
  177. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/registry/__init__.py +0 -0
  178. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/registry/client.py +0 -0
  179. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/registry/integration.py +0 -0
  180. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/registry/operations.py +0 -0
  181. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/__init__.py +0 -0
  182. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/base.py +0 -0
  183. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/codex_runtime.py +0 -0
  184. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/copilot_runtime.py +0 -0
  185. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/factory.py +0 -0
  186. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/llm_runtime.py +0 -0
  187. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/runtime/manager.py +0 -0
  188. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/security/__init__.py +0 -0
  189. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/security/audit_report.py +0 -0
  190. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/security/content_scanner.py +0 -0
  191. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/security/file_scanner.py +0 -0
  192. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/security/gate.py +0 -0
  193. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/update_policy.py +0 -0
  194. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/__init__.py +0 -0
  195. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/console.py +0 -0
  196. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/content_hash.py +0 -0
  197. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/diagnostics.py +0 -0
  198. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/exclude.py +0 -0
  199. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/file_ops.py +0 -0
  200. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/helpers.py +0 -0
  201. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/path_security.py +0 -0
  202. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/paths.py +0 -0
  203. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/version_checker.py +0 -0
  204. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/utils/yaml_io.py +0 -0
  205. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/version.py +0 -0
  206. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/workflow/__init__.py +0 -0
  207. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/workflow/discovery.py +0 -0
  208. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/workflow/parser.py +0 -0
  209. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli/workflow/runner.py +0 -0
  210. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli.egg-info/dependency_links.txt +0 -0
  211. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli.egg-info/entry_points.txt +0 -0
  212. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli.egg-info/requires.txt +0 -0
  213. {apm_cli-0.9.1 → apm_cli-0.9.2}/src/apm_cli.egg-info/top_level.txt +0 -0
  214. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_apm_package_models.py +0 -0
  215. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_apm_resolver.py +0 -0
  216. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_codex_docker_args_fix.py +0 -0
  217. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_codex_empty_string_and_defaults.py +0 -0
  218. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_collision_integration.py +0 -0
  219. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_console.py +0 -0
  220. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_distributed_compilation.py +0 -0
  221. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_empty_string_and_defaults.py +0 -0
  222. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_enhanced_discovery.py +0 -0
  223. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_github_downloader.py +0 -0
  224. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_github_downloader_token_precedence.py +0 -0
  225. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_lockfile.py +0 -0
  226. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_runnable_prompts.py +0 -0
  227. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_runtime_manager_token_precedence.py +0 -0
  228. {apm_cli-0.9.1 → apm_cli-0.9.2}/tests/test_token_manager.py +0 -0
  229. {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.1
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
- ## Highlights
109
+ ## The three promises
105
110
 
106
- - **[One manifest for everything](https://microsoft.github.io/apm/reference/primitive-types/)** instructions, skills, prompts, agents, hooks, plugins, and [MCP servers](https://microsoft.github.io/apm/guides/mcp-servers/) declared in `apm.yml` and deployed across every client on install
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
- - **[Content security](https://microsoft.github.io/apm/enterprise/security/)** — `apm audit` scans for hidden Unicode; `apm install` blocks compromised packages before agents read them
110
- - **[Author plugins](https://microsoft.github.io/apm/guides/plugins/)** — build Copilot, Claude, and Cursor plugins with dependency management and security scanning, then export standard `plugin.json`
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
- ## Highlights
47
+ ## The three promises
43
48
 
44
- - **[One manifest for everything](https://microsoft.github.io/apm/reference/primitive-types/)** instructions, skills, prompts, agents, hooks, plugins, and [MCP servers](https://microsoft.github.io/apm/guides/mcp-servers/) declared in `apm.yml` and deployed across every client on install
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
- - **[Content security](https://microsoft.github.io/apm/enterprise/security/)** — `apm audit` scans for hidden Unicode; `apm install` blocks compromised packages before agents read them
48
- - **[Author plugins](https://microsoft.github.io/apm/guides/plugins/)** — build Copilot, Claude, and Cursor plugins with dependency management and security scanning, then export standard `plugin.json`
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
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "apm-cli"
7
- version = "0.9.1"
7
+ version = "0.9.2"
8
8
  description = "MCP configuration tool"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -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
  # ---------------------------------------------------------------------------