apm-cli 0.22.0__tar.gz → 0.23.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.
Files changed (418) hide show
  1. {apm_cli-0.22.0 → apm_cli-0.23.0}/NOTICE +2 -2
  2. {apm_cli-0.22.0/src/apm_cli.egg-info → apm_cli-0.23.0}/PKG-INFO +4 -4
  3. {apm_cli-0.22.0 → apm_cli-0.23.0}/README.md +1 -1
  4. {apm_cli-0.22.0 → apm_cli-0.23.0}/pyproject.toml +3 -3
  5. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/bundle/local_bundle.py +8 -2
  6. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/bundle/packer.py +2 -2
  7. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/bundle/plugin_exporter.py +13 -4
  8. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/bundle/unpacker.py +5 -2
  9. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/cli.py +8 -2
  10. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/compile/cli.py +13 -13
  11. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/compile/watcher.py +0 -4
  12. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/deps/_utils.py +4 -4
  13. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/deps/cli.py +6 -2
  14. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/init.py +5 -3
  15. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/install.py +2 -1
  16. apm_cli-0.23.0/src/apm_cli/commands/lifecycle.py +591 -0
  17. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/plugin/__init__.py +5 -1
  18. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/mcp.py +3 -2
  19. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/outdated.py +14 -2
  20. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/run.py +4 -3
  21. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/uninstall/cli.py +64 -0
  22. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/update.py +82 -6
  23. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/view.py +158 -30
  24. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/agents_compiler.py +7 -7
  25. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/build_orchestrator.py +4 -4
  26. apm_cli-0.23.0/src/apm_cli/core/lifecycle_scripts.py +622 -0
  27. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/plugin_manifest.py +6 -2
  28. apm_cli-0.23.0/src/apm_cli/core/script_executors.py +1853 -0
  29. apm_cli-0.23.0/src/apm_cli/core/script_trust.py +350 -0
  30. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/aggregator.py +2 -2
  31. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/download_strategies.py +1 -1
  32. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/github_downloader.py +0 -1
  33. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/lockfile.py +7 -1
  34. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/package_validator.py +5 -5
  35. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/plugin_parser.py +41 -12
  36. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/registry/client.py +92 -29
  37. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/registry/config_loader.py +26 -18
  38. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/revision_pins.py +2 -2
  39. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/cache_pin.py +17 -10
  40. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/drift.py +21 -12
  41. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/local_bundle_handler.py +4 -1
  42. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/lockfile.py +78 -1
  43. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/plan.py +17 -0
  44. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/service.py +64 -1
  45. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/agent_integrator.py +7 -17
  46. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/command_integrator.py +45 -12
  47. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/copilot_app_workflow_integrator.py +2 -3
  48. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/instruction_integrator.py +6 -5
  49. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/mcp_integrator.py +50 -36
  50. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/prompt_integrator.py +2 -3
  51. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/audit.py +2 -1
  52. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/builder.py +21 -7
  53. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/client.py +87 -43
  54. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/version_check.py +6 -1
  55. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/apm_package.py +1 -1
  56. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/dependency/reference.py +2 -4
  57. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/validation.py +6 -7
  58. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/discovery.py +2 -1
  59. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/parser.py +2 -1
  60. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/project_config.py +4 -2
  61. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/primitives/discovery.py +3 -9
  62. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/primitives/parser.py +10 -13
  63. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/registry/client.py +74 -14
  64. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/update_policy.py +1 -1
  65. apm_cli-0.23.0/src/apm_cli/utils/yaml_io.py +401 -0
  66. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/workflow/parser.py +2 -2
  67. {apm_cli-0.22.0 → apm_cli-0.23.0/src/apm_cli.egg-info}/PKG-INFO +4 -4
  68. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli.egg-info/SOURCES.txt +4 -0
  69. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli.egg-info/requires.txt +2 -2
  70. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_apm_package_models.py +3 -3
  71. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_enhanced_discovery.py +17 -17
  72. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_github_downloader.py +0 -1
  73. apm_cli-0.22.0/src/apm_cli/utils/yaml_io.py +0 -95
  74. {apm_cli-0.22.0 → apm_cli-0.23.0}/AUTHORS +0 -0
  75. {apm_cli-0.22.0 → apm_cli-0.23.0}/LICENSE +0 -0
  76. {apm_cli-0.22.0 → apm_cli-0.23.0}/setup.cfg +0 -0
  77. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/__init__.py +0 -0
  78. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/__init__.py +0 -0
  79. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/__init__.py +0 -0
  80. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/_mcp_runtime_args.py +0 -0
  81. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/antigravity.py +0 -0
  82. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/base.py +0 -0
  83. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/claude.py +0 -0
  84. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/codex.py +0 -0
  85. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/copilot.py +0 -0
  86. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/cursor.py +0 -0
  87. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/gemini.py +0 -0
  88. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/hermes.py +0 -0
  89. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/intellij.py +0 -0
  90. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/kiro.py +0 -0
  91. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/opencode.py +0 -0
  92. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/vscode.py +0 -0
  93. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/client/windsurf.py +0 -0
  94. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
  95. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/package_manager/base.py +0 -0
  96. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
  97. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/bootstrap_mirror.py +0 -0
  98. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/bundle/__init__.py +0 -0
  99. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/bundle/lockfile_enrichment.py +0 -0
  100. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/cache/__init__.py +0 -0
  101. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/cache/git_cache.py +0 -0
  102. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/cache/http_cache.py +0 -0
  103. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/cache/integrity.py +0 -0
  104. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/cache/locking.py +0 -0
  105. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/cache/paths.py +0 -0
  106. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/cache/url_normalize.py +0 -0
  107. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/__init__.py +0 -0
  108. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/_apm_yml_writer.py +0 -0
  109. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/_helpers.py +0 -0
  110. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/approve.py +0 -0
  111. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/audit.py +0 -0
  112. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/cache.py +0 -0
  113. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/compile/__init__.py +0 -0
  114. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/config.py +0 -0
  115. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/deps/__init__.py +0 -0
  116. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/deps/why.py +0 -0
  117. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/doctor.py +0 -0
  118. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/experimental.py +0 -0
  119. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/find.py +0 -0
  120. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/list_cmd.py +0 -0
  121. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/lock.py +0 -0
  122. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/__init__.py +0 -0
  123. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/audit.py +0 -0
  124. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/check.py +0 -0
  125. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/doctor.py +0 -0
  126. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/init.py +0 -0
  127. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/migrate.py +0 -0
  128. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/outdated.py +0 -0
  129. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/plugin/add.py +0 -0
  130. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/plugin/remove.py +0 -0
  131. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/plugin/set.py +0 -0
  132. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/marketplace/validate.py +0 -0
  133. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/pack.py +0 -0
  134. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/plugin/__init__.py +0 -0
  135. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/plugin/init.py +0 -0
  136. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/policy.py +0 -0
  137. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/prune.py +0 -0
  138. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/publish.py +0 -0
  139. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/runtime.py +0 -0
  140. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/self_update.py +0 -0
  141. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/targets.py +0 -0
  142. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/uninstall/__init__.py +0 -0
  143. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/commands/uninstall/engine.py +0 -0
  144. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/__init__.py +0 -0
  145. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/build_id.py +0 -0
  146. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/claude_formatter.py +0 -0
  147. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/constants.py +0 -0
  148. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/constitution.py +0 -0
  149. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/constitution_block.py +0 -0
  150. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/context_optimizer.py +0 -0
  151. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/distributed_compiler.py +0 -0
  152. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/gemini_formatter.py +0 -0
  153. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/injector.py +0 -0
  154. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/link_resolver.py +0 -0
  155. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/managed_section.py +0 -0
  156. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/output_writer.py +0 -0
  157. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/template_builder.py +0 -0
  158. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/compilation/user_root_context.py +0 -0
  159. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/config.py +0 -0
  160. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/constants.py +0 -0
  161. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/__init__.py +0 -0
  162. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/apm_yml.py +0 -0
  163. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/auth.py +0 -0
  164. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/azure_cli.py +0 -0
  165. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/command_logger.py +0 -0
  166. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/conflict_detector.py +0 -0
  167. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/docker_args.py +0 -0
  168. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/errors.py +0 -0
  169. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/experimental.py +0 -0
  170. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/install_audit.py +0 -0
  171. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/null_logger.py +0 -0
  172. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/operations.py +0 -0
  173. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/safe_installer.py +0 -0
  174. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/scope.py +0 -0
  175. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/script_runner.py +0 -0
  176. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/target_detection.py +0 -0
  177. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/core/token_manager.py +0 -0
  178. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/__init__.py +0 -0
  179. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/_shared.py +0 -0
  180. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/apm_resolver.py +0 -0
  181. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/artifactory_entry.py +0 -0
  182. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/artifactory_orchestrator.py +0 -0
  183. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/bare_cache.py +0 -0
  184. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/clone_engine.py +0 -0
  185. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/dependency_graph.py +0 -0
  186. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/git_auth_env.py +0 -0
  187. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/git_file_transport.py +0 -0
  188. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/git_reference_resolver.py +0 -0
  189. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/git_remote_ops.py +0 -0
  190. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/git_semver_resolver.py +0 -0
  191. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/github_downloader_validation.py +0 -0
  192. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/host_backends.py +0 -0
  193. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/installed_package.py +0 -0
  194. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/outdated_row.py +0 -0
  195. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/path_anchoring.py +0 -0
  196. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/registry/__init__.py +0 -0
  197. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/registry/auth.py +0 -0
  198. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/registry/extractor.py +0 -0
  199. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/registry/feature_gate.py +0 -0
  200. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/registry/outdated.py +0 -0
  201. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/registry/resolver.py +0 -0
  202. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/registry/semver.py +0 -0
  203. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/registry_proxy.py +0 -0
  204. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/shared_clone_cache.py +0 -0
  205. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/tiered_ref_resolver.py +0 -0
  206. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/transport_selection.py +0 -0
  207. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/verifier.py +0 -0
  208. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/deps/why_walker.py +0 -0
  209. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/drift.py +0 -0
  210. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/export/__init__.py +0 -0
  211. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/export/authoring.py +0 -0
  212. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/export/declared_license.py +0 -0
  213. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/export/formats.py +0 -0
  214. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/export/purl.py +0 -0
  215. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/export/sbom.py +0 -0
  216. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/export/spdx.py +0 -0
  217. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/export/spdx_data.py +0 -0
  218. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/factory.py +0 -0
  219. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/__init__.py +0 -0
  220. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/artifactory_resolver.py +0 -0
  221. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/context.py +0 -0
  222. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/deployed_paths.py +0 -0
  223. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/errors.py +0 -0
  224. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/exec_gate.py +0 -0
  225. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/gitlab_resolver.py +0 -0
  226. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/heals/__init__.py +0 -0
  227. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/heals/base.py +0 -0
  228. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/heals/branch_ref_drift.py +0 -0
  229. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/heals/buggy_lockfile_recovery.py +0 -0
  230. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/helpers/__init__.py +0 -0
  231. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/helpers/security_scan.py +0 -0
  232. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/insecure_policy.py +0 -0
  233. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/integrity.py +0 -0
  234. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/lsp/__init__.py +0 -0
  235. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/lsp/integration.py +0 -0
  236. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/manifest_reconcile.py +0 -0
  237. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/mcp/__init__.py +0 -0
  238. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/mcp/args.py +0 -0
  239. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/mcp/command.py +0 -0
  240. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/mcp/conflicts.py +0 -0
  241. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/mcp/entry.py +0 -0
  242. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/mcp/registry.py +0 -0
  243. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/mcp/warnings.py +0 -0
  244. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/mcp/writer.py +0 -0
  245. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/package_resolution.py +0 -0
  246. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/package_selection.py +0 -0
  247. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/__init__.py +0 -0
  248. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/_redownload.py +0 -0
  249. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/_skip_logic.py +0 -0
  250. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/audit.py +0 -0
  251. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/cleanup.py +0 -0
  252. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/download.py +0 -0
  253. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/finalize.py +0 -0
  254. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/heal.py +0 -0
  255. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/integrate.py +0 -0
  256. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/local_content.py +0 -0
  257. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/policy_gate.py +0 -0
  258. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/policy_target_check.py +0 -0
  259. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/post_deps_local.py +0 -0
  260. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/resolve.py +0 -0
  261. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/phases/targets.py +0 -0
  262. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/pipeline.py +0 -0
  263. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/presentation/__init__.py +0 -0
  264. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/presentation/dry_run.py +0 -0
  265. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/registry_wiring.py +0 -0
  266. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/request.py +0 -0
  267. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/root_redirect.py +0 -0
  268. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/services.py +0 -0
  269. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/skill_path_migration.py +0 -0
  270. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/sources.py +0 -0
  271. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/summary.py +0 -0
  272. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/target_filter.py +0 -0
  273. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/template.py +0 -0
  274. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/install/validation.py +0 -0
  275. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/__init__.py +0 -0
  276. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/_shared.py +0 -0
  277. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/base_integrator.py +0 -0
  278. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/canvas_integrator.py +0 -0
  279. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/cleanup.py +0 -0
  280. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/copilot_app_db.py +0 -0
  281. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/copilot_app_project.py +0 -0
  282. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/copilot_app_ws.py +0 -0
  283. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/copilot_cowork_paths.py +0 -0
  284. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/coverage.py +0 -0
  285. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/dispatch.py +0 -0
  286. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/hook_file_routing.py +0 -0
  287. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/hook_integrator.py +0 -0
  288. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/kiro_hook_integrator.py +0 -0
  289. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/lsp_integrator.py +0 -0
  290. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/mcp_integrator_install.py +0 -0
  291. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/opencode_frontmatter.py +0 -0
  292. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/skill_integrator.py +0 -0
  293. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/skill_transformer.py +0 -0
  294. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/targets.py +0 -0
  295. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/integration/utils.py +0 -0
  296. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/__init__.py +0 -0
  297. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/_git_utils.py +0 -0
  298. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/_io.py +0 -0
  299. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/_shared.py +0 -0
  300. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/auth_helpers.py +0 -0
  301. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/diagnostics.py +0 -0
  302. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/drift_check.py +0 -0
  303. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/errors.py +0 -0
  304. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/git_stderr.py +0 -0
  305. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/init_template.py +0 -0
  306. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/migration.py +0 -0
  307. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/models.py +0 -0
  308. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/output_mappers.py +0 -0
  309. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/output_profiles.py +0 -0
  310. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/ref_resolver.py +0 -0
  311. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/registry.py +0 -0
  312. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/resolver.py +0 -0
  313. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/semver.py +0 -0
  314. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/shadow_detector.py +0 -0
  315. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/tag_pattern.py +0 -0
  316. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/validator.py +0 -0
  317. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/version_pins.py +0 -0
  318. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/version_resolver.py +0 -0
  319. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/yml_editor.py +0 -0
  320. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/marketplace/yml_schema.py +0 -0
  321. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/__init__.py +0 -0
  322. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/dependency/__init__.py +0 -0
  323. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/dependency/identity.py +0 -0
  324. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/dependency/lsp.py +0 -0
  325. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/dependency/mcp.py +0 -0
  326. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/dependency/subsets.py +0 -0
  327. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/dependency/types.py +0 -0
  328. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/format_detection.py +0 -0
  329. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/plugin.py +0 -0
  330. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/models/results.py +0 -0
  331. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/output/__init__.py +0 -0
  332. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/output/formatters.py +0 -0
  333. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/output/models.py +0 -0
  334. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/output/script_formatters.py +0 -0
  335. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/__init__.py +0 -0
  336. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/_constraint_pinning.py +0 -0
  337. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/_help_text.py +0 -0
  338. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/_shared.py +0 -0
  339. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/ci_checks.py +0 -0
  340. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/inheritance.py +0 -0
  341. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/install_preflight.py +0 -0
  342. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/matcher.py +0 -0
  343. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/models.py +0 -0
  344. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/outcome_routing.py +0 -0
  345. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/policy_checks.py +0 -0
  346. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/policy/schema.py +0 -0
  347. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/primitives/__init__.py +0 -0
  348. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/primitives/models.py +0 -0
  349. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/registry/__init__.py +0 -0
  350. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/registry/integration.py +0 -0
  351. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/registry/operations.py +0 -0
  352. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/runtime/__init__.py +0 -0
  353. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/runtime/base.py +0 -0
  354. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/runtime/codex_runtime.py +0 -0
  355. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/runtime/copilot_runtime.py +0 -0
  356. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/runtime/factory.py +0 -0
  357. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/runtime/llm_runtime.py +0 -0
  358. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/runtime/manager.py +0 -0
  359. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/runtime/utils.py +0 -0
  360. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/__init__.py +0 -0
  361. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/audit_report.py +0 -0
  362. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/content_scanner.py +0 -0
  363. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/executables.py +0 -0
  364. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/external/__init__.py +0 -0
  365. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/external/base.py +0 -0
  366. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/external/gate.py +0 -0
  367. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/external/generic_sarif.py +0 -0
  368. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/external/options.py +0 -0
  369. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/external/registry.py +0 -0
  370. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/external/runner.py +0 -0
  371. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/external/sarif_ingest.py +0 -0
  372. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/external/skillspector.py +0 -0
  373. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/file_scanner.py +0 -0
  374. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/security/gate.py +0 -0
  375. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/__init__.py +0 -0
  376. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/archive.py +0 -0
  377. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/atomic_io.py +0 -0
  378. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/console.py +0 -0
  379. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/content_hash.py +0 -0
  380. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/diagnostics.py +0 -0
  381. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/exclude.py +0 -0
  382. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/file_ops.py +0 -0
  383. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/git_env.py +0 -0
  384. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/git_sparse.py +0 -0
  385. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/github_host.py +0 -0
  386. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/guards.py +0 -0
  387. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/helpers.py +0 -0
  388. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/install_tui.py +0 -0
  389. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/normalization.py +0 -0
  390. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/path_security.py +0 -0
  391. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/paths.py +0 -0
  392. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/patterns.py +0 -0
  393. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/perf_stats.py +0 -0
  394. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/reflink.py +0 -0
  395. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/short_sha.py +0 -0
  396. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/subprocess_env.py +0 -0
  397. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/utils/version_checker.py +0 -0
  398. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/version.py +0 -0
  399. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/workflow/__init__.py +0 -0
  400. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/workflow/discovery.py +0 -0
  401. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli/workflow/runner.py +0 -0
  402. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli.egg-info/dependency_links.txt +0 -0
  403. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli.egg-info/entry_points.txt +0 -0
  404. {apm_cli-0.22.0 → apm_cli-0.23.0}/src/apm_cli.egg-info/top_level.txt +0 -0
  405. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_apm_resolver.py +0 -0
  406. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_codex_docker_args_fix.py +0 -0
  407. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_codex_empty_string_and_defaults.py +0 -0
  408. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_collision_integration.py +0 -0
  409. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_console.py +0 -0
  410. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_distributed_compilation.py +0 -0
  411. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_empty_string_and_defaults.py +0 -0
  412. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_github_downloader_token_precedence.py +0 -0
  413. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_gitlab_git_transport.py +0 -0
  414. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_lockfile.py +0 -0
  415. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_runnable_prompts.py +0 -0
  416. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_runtime_manager_token_precedence.py +0 -0
  417. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_token_manager.py +0 -0
  418. {apm_cli-0.22.0 → apm_cli-0.23.0}/tests/test_virtual_package_multi_install.py +0 -0
@@ -372,7 +372,7 @@ THE SOFTWARE.
372
372
 
373
373
  ## Component. llm
374
374
 
375
- - Version requirement: `>=0.17.0`
375
+ - Version requirement: `>=0.28`
376
376
  - Upstream: https://github.com/simonw/llm
377
377
  - SPDX: `Apache-2.0`
378
378
  - Notes: No NOTICE or AUTHORS file present upstream; nothing additional to forward.
@@ -589,7 +589,7 @@ _Copyright Simon Willison (per PyPI author metadata; LICENSE file is the unmodif
589
589
 
590
590
  ## Component. llm-github-models
591
591
 
592
- - Version requirement: `>=0.1.0`
592
+ - Version requirement: `>=0.18.0`
593
593
  - Upstream: https://github.com/tonybaloney/llm-github-models
594
594
  - SPDX: `Apache-2.0`
595
595
  - Notes: Upstream LICENSE file declares MIT license text but PyPI metadata + classifiers say Apache-2.0. See Open Issues.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: apm-cli
3
- Version: 0.22.0
3
+ Version: 0.23.0
4
4
  Summary: MCP configuration tool
5
5
  Author-email: Daniel Meppiel <user@example.com>
6
6
  License: MIT License
@@ -42,8 +42,8 @@ Requires-Dist: colorama>=0.4.6
42
42
  Requires-Dist: pyyaml>=6.0.0
43
43
  Requires-Dist: requests>=2.31.0
44
44
  Requires-Dist: python-frontmatter>=1.0.0
45
- Requires-Dist: llm>=0.17.0
46
- Requires-Dist: llm-github-models>=0.1.0
45
+ Requires-Dist: llm>=0.28
46
+ Requires-Dist: llm-github-models>=0.18.0
47
47
  Requires-Dist: tomli>=1.2.0; python_version < "3.11"
48
48
  Requires-Dist: toml>=0.10.2
49
49
  Requires-Dist: rich>=13.0.0
@@ -178,7 +178,7 @@ curl -sSL https://aka.ms/apm-unix | sh
178
178
  irm https://aka.ms/apm-windows | iex
179
179
  ```
180
180
 
181
- Native release binaries are published for macOS, Linux, and Windows x86_64. `apm update` reuses the matching platform installer.
181
+ Native release binaries are published for macOS, Linux, and Windows x86_64. `apm self-update` reuses the matching platform installer.
182
182
 
183
183
  <details>
184
184
  <summary>Other install methods</summary>
@@ -110,7 +110,7 @@ curl -sSL https://aka.ms/apm-unix | sh
110
110
  irm https://aka.ms/apm-windows | iex
111
111
  ```
112
112
 
113
- Native release binaries are published for macOS, Linux, and Windows x86_64. `apm update` reuses the matching platform installer.
113
+ Native release binaries are published for macOS, Linux, and Windows x86_64. `apm self-update` reuses the matching platform installer.
114
114
 
115
115
  <details>
116
116
  <summary>Other install methods</summary>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "apm-cli"
7
- version = "0.22.0"
7
+ version = "0.23.0"
8
8
  description = "MCP configuration tool"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -27,8 +27,8 @@ dependencies = [
27
27
  "pyyaml>=6.0.0",
28
28
  "requests>=2.31.0",
29
29
  "python-frontmatter>=1.0.0",
30
- "llm>=0.17.0",
31
- "llm-github-models>=0.1.0",
30
+ "llm>=0.28",
31
+ "llm-github-models>=0.18.0",
32
32
  "tomli>=1.2.0; python_version<'3.11'",
33
33
  "toml>=0.10.2",
34
34
  "rich>=13.0.0",
@@ -47,6 +47,7 @@ from ..utils.path_security import (
47
47
  ensure_path_within,
48
48
  validate_path_segments,
49
49
  )
50
+ from ..utils.yaml_io import load_yaml_str
50
51
 
51
52
  _MAX_ZIP_ENTRIES = MAX_ZIP_ENTRIES
52
53
  _MAX_ZIP_UNCOMPRESSED = MAX_ZIP_UNCOMPRESSED
@@ -93,7 +94,12 @@ def read_bundle_plugin_json(bundle_dir: Path) -> dict[str, Any]:
93
94
  return {}
94
95
  try:
95
96
  data = json.loads(pj_path.read_text(encoding="utf-8"))
96
- except (json.JSONDecodeError, OSError):
97
+ except (OSError, ValueError, RecursionError):
98
+ # json.JSONDecodeError is a ValueError subclass; the wider set also
99
+ # fails closed on a deeply-nested JSON (RecursionError) or an
100
+ # oversized-integer literal (bare ValueError from int_max_str_digits)
101
+ # in an untrusted bundle's plugin.json -- the same fail-closed posture
102
+ # parse_script_file / _load_trust_store take.
97
103
  return {}
98
104
  return data if isinstance(data, dict) else {}
99
105
 
@@ -104,7 +110,7 @@ def _read_bundle_lockfile(bundle_dir: Path) -> dict[str, Any] | None:
104
110
  if not lf_path.is_file():
105
111
  return None
106
112
  try:
107
- data = yaml.safe_load(lf_path.read_text(encoding="utf-8"))
113
+ data = load_yaml_str(lf_path.read_text(encoding="utf-8"))
108
114
  except (yaml.YAMLError, OSError):
109
115
  return None
110
116
  return data if isinstance(data, dict) else None
@@ -104,10 +104,10 @@ def pack_bundle(
104
104
  # at pack time -- this is the publish gate for the AUTHOR.
105
105
  if is_hybrid_root and not package.description and logger:
106
106
  try:
107
- import frontmatter as _frontmatter
107
+ from apm_cli.utils.yaml_io import load_frontmatter
108
108
 
109
109
  with open(skill_md_path, encoding="utf-8") as _f:
110
- _skill_post = _frontmatter.load(_f)
110
+ _skill_post = load_frontmatter(_f)
111
111
  _skill_desc = _skill_post.metadata.get("description")
112
112
  except Exception:
113
113
  _skill_desc = None
@@ -246,7 +246,9 @@ def _collect_hooks_from_apm(apm_dir: Path) -> dict:
246
246
  data = json.loads(f.read_text(encoding="utf-8"))
247
247
  if isinstance(data, dict):
248
248
  _deep_merge(hooks, data, overwrite=False)
249
- except (json.JSONDecodeError, OSError):
249
+ except (OSError, ValueError, RecursionError):
250
+ # Untrusted .apm/hooks/*.json: oversized-int -> bare ValueError,
251
+ # deep nest -> RecursionError. Fail closed (skip this file).
250
252
  pass
251
253
  return hooks
252
254
 
@@ -261,7 +263,9 @@ def _collect_hooks_from_root(package_root: Path) -> dict:
261
263
  data = json.loads(hooks_file.read_text(encoding="utf-8"))
262
264
  if isinstance(data, dict):
263
265
  _deep_merge(hooks, data, overwrite=False)
264
- except (json.JSONDecodeError, OSError):
266
+ except (OSError, ValueError, RecursionError):
267
+ # Untrusted root hooks.json: fail closed (oversized-int ValueError /
268
+ # deep-nest RecursionError are not JSONDecodeError).
265
269
  pass
266
270
  # Directory
267
271
  hooks_dir = package_root / "hooks"
@@ -272,7 +276,8 @@ def _collect_hooks_from_root(package_root: Path) -> dict:
272
276
  data = json.loads(f.read_text(encoding="utf-8"))
273
277
  if isinstance(data, dict):
274
278
  _deep_merge(hooks, data, overwrite=False)
275
- except (json.JSONDecodeError, OSError):
279
+ except (OSError, ValueError, RecursionError):
280
+ # Untrusted .../hooks/*.json: fail closed (skip this file).
276
281
  pass
277
282
  return hooks
278
283
 
@@ -356,7 +361,11 @@ def _has_marketplace_block(apm_yml_path: Path) -> bool:
356
361
  try:
357
362
  import yaml
358
363
 
359
- data = yaml.safe_load(apm_yml_path.read_text(encoding="utf-8")) or {}
364
+ # Bounded loader so a hostile apm.yml cannot wedge the export with a
365
+ # merge/alias expansion bomb (fails closed as yaml.YAMLError).
366
+ from apm_cli.utils.yaml_io import load_yaml
367
+
368
+ data = load_yaml(apm_yml_path) or {}
360
369
  except (OSError, yaml.YAMLError):
361
370
  return False
362
371
  return bool(data.get("marketplace"))
@@ -130,9 +130,12 @@ def unpack_bundle(
130
130
  # Extract pack: metadata (written by apm pack) before structured parse
131
131
  pack_meta: dict = {}
132
132
  try:
133
- import yaml
133
+ from ..utils.yaml_io import load_yaml
134
134
 
135
- raw = yaml.safe_load(lockfile_path.read_text(encoding="utf-8"))
135
+ # Bounded loader: an untrusted bundle lockfile cannot hang the
136
+ # unpacker with a merge-key bomb (the except below cannot catch a
137
+ # non-terminating safe_load loop).
138
+ raw = load_yaml(lockfile_path)
136
139
  if isinstance(raw, dict):
137
140
  val = raw.get("pack", {})
138
141
  pack_meta = val if isinstance(val, dict) else {}
@@ -29,6 +29,7 @@ from apm_cli.commands.experimental import experimental
29
29
  from apm_cli.commands.find import find as find_cmd
30
30
  from apm_cli.commands.init import init
31
31
  from apm_cli.commands.install import install
32
+ from apm_cli.commands.lifecycle import lifecycle
32
33
  from apm_cli.commands.list_cmd import list as list_cmd
33
34
  from apm_cli.commands.lock import lock
34
35
  from apm_cli.commands.marketplace import marketplace
@@ -142,8 +143,12 @@ def cli(ctx, verbose: bool) -> None:
142
143
 
143
144
  warnings.filterwarnings("ignore", category=AgentsTargetDeprecationWarning)
144
145
 
145
- # Check for updates non-blockingly (only if not already showing version)
146
- if not ctx.resilient_parsing:
146
+ # Check for updates only for known commands; skip on invalid input to fail fast.
147
+ if (
148
+ not ctx.resilient_parsing
149
+ and ctx.invoked_subcommand is not None
150
+ and ctx.command.get_command(ctx, ctx.invoked_subcommand) is not None
151
+ ):
147
152
  _check_and_notify_updates()
148
153
 
149
154
 
@@ -187,6 +192,7 @@ cli.add_command(mcp)
187
192
  cli.add_command(policy)
188
193
  cli.add_command(outdated_cmd, name="outdated")
189
194
  cli.add_command(doctor)
195
+ cli.add_command(lifecycle)
190
196
  cli.add_command(marketplace)
191
197
  cli.add_command(find_cmd)
192
198
  cli.add_command(marketplace_search, name="search")
@@ -69,8 +69,8 @@ def _display_single_file_summary(stats, c_status, c_hash, output_path, dry_run):
69
69
  "[+] All validated",
70
70
  )
71
71
  table.add_row(
72
- "Chatmodes",
73
- str(stats.get("chatmodes", 0)),
72
+ "Agents",
73
+ str(stats.get("agents", 0)),
74
74
  "[+] All validated",
75
75
  )
76
76
 
@@ -448,7 +448,7 @@ def _validate_project(logger: CommandLogger, dry_run: bool, source_root: Path) -
448
448
  # Check if .apm directory has actual content
449
449
  apm_dir = source_root / APM_DIR
450
450
  local_apm_has_content = apm_dir.exists() and (
451
- any(apm_dir.rglob("*.instructions.md")) or any(apm_dir.rglob("*.chatmode.md"))
451
+ any(apm_dir.rglob("*.instructions.md")) or any(apm_dir.rglob("*.agent.md"))
452
452
  )
453
453
 
454
454
  # If no primitive sources exist, check deeper to provide better feedback
@@ -457,20 +457,20 @@ def _validate_project(logger: CommandLogger, dry_run: bool, source_root: Path) -
457
457
  has_empty_apm = (
458
458
  apm_dir.exists()
459
459
  and not any(apm_dir.rglob("*.instructions.md"))
460
- and not any(apm_dir.rglob("*.chatmode.md"))
460
+ and not any(apm_dir.rglob("*.agent.md"))
461
461
  )
462
462
 
463
463
  if has_empty_apm:
464
464
  logger.error("No instruction files found in .apm/ directory")
465
465
  logger.progress(" To add instructions, create files like:")
466
466
  logger.progress(" .apm/instructions/coding-standards.instructions.md")
467
- logger.progress(" .apm/chatmodes/backend-engineer.chatmode.md")
467
+ logger.progress(" .apm/agents/backend-engineer.agent.md")
468
468
  else:
469
469
  logger.error("No APM content found to compile")
470
470
  logger.progress(" To get started:")
471
471
  logger.progress(" 1. Install APM dependencies: apm install <owner>/<repo>")
472
472
  logger.progress(" 2. Or create local instructions: mkdir -p .apm/instructions")
473
- logger.progress(" 3. Then create .instructions.md or .chatmode.md files")
473
+ logger.progress(" 3. Then create .instructions.md or .agent.md files")
474
474
 
475
475
  if not dry_run: # Don't exit on dry-run to allow testing
476
476
  sys.exit(1)
@@ -951,23 +951,23 @@ def _run_compilation(
951
951
  help="Compile for all canonical targets. Equivalent to --target all.",
952
952
  )
953
953
  @click.option(
954
- "--no-dedup/--no-force-instructions",
954
+ "--force-instructions/--no-force-instructions",
955
955
  "no_dedup",
956
- is_flag=True,
957
956
  default=False,
958
957
  help=(
959
958
  "Include the instructions section in CLAUDE.md even when .claude/rules/ is "
959
+ "already populated, and in AGENTS.md even when .github/instructions/ is "
960
960
  "already populated. Overrides the default deduplication that normally omits "
961
- "the section to avoid duplicate context in Claude Code. Affects the Claude "
962
- "target only. Alias: --force-instructions."
961
+ "these sections to avoid duplicate context. Affects both the Claude and "
962
+ "Copilot (AGENTS.md) deduplication paths. Alias: --no-dedup."
963
963
  ),
964
964
  )
965
965
  @click.option(
966
- "--force-instructions",
966
+ "--no-dedup",
967
967
  "no_dedup",
968
968
  is_flag=True,
969
969
  default=False,
970
- help="Alias for --no-dedup.",
970
+ help="Alias for --force-instructions.",
971
971
  hidden=True,
972
972
  )
973
973
  @click.option(
@@ -1073,7 +1073,7 @@ def compile( # noqa: PLR0913 -- Click handler
1073
1073
  "compile_all": "--all",
1074
1074
  "legacy_skill_paths": "--legacy-skill-paths",
1075
1075
  "local_only": "--local-only",
1076
- "no_dedup": "--no-dedup/--force-instructions",
1076
+ "no_dedup": "--force-instructions/--no-force-instructions",
1077
1077
  "no_links": "--no-links",
1078
1078
  "output": "--output",
1079
1079
  "root": "--root",
@@ -234,10 +234,6 @@ def _watch_mode(
234
234
  observer.schedule(event_handler, ".github/agents", recursive=True)
235
235
  watch_paths.append(".github/agents/")
236
236
 
237
- if Path(".github/chatmodes").exists():
238
- observer.schedule(event_handler, ".github/chatmodes", recursive=True)
239
- watch_paths.append(".github/chatmodes/")
240
-
241
237
  if Path(APM_YML_FILENAME).exists():
242
238
  observer.schedule(event_handler, ".", recursive=False)
243
239
  watch_paths.append(APM_YML_FILENAME)
@@ -105,7 +105,7 @@ def _count_package_files(package_path: Path) -> tuple[int, int]:
105
105
  return 0, workflow_count
106
106
 
107
107
  context_count = 0
108
- context_dirs = ["instructions", "chatmodes", "context"]
108
+ context_dirs = ["instructions", "agents", "context"]
109
109
 
110
110
  for context_dir in context_dirs:
111
111
  context_path = apm_dir / context_dir
@@ -134,12 +134,12 @@ def _get_detailed_context_counts(package_path: Path) -> dict[str, int]:
134
134
  """Get detailed context file counts by type."""
135
135
  apm_dir = package_path / APM_DIR
136
136
  if not apm_dir.exists():
137
- return {"instructions": 0, "chatmodes": 0, "contexts": 0}
137
+ return {"instructions": 0, "agents": 0, "contexts": 0}
138
138
 
139
139
  counts = {}
140
140
  context_directories = {
141
141
  "instructions": "instructions",
142
- "chatmodes": "chatmodes",
142
+ "agents": "agents",
143
143
  "contexts": "context", # Note: directory is 'context', not 'contexts'
144
144
  }
145
145
 
@@ -235,7 +235,7 @@ def _get_detailed_package_info(package_path: Path) -> dict[str, Any]:
235
235
  "author": "Unknown",
236
236
  "source": "unknown",
237
237
  "install_path": str(package_path.resolve()),
238
- "context_files": {"instructions": 0, "chatmodes": 0, "contexts": 0},
238
+ "context_files": {"instructions": 0, "agents": 0, "contexts": 0},
239
239
  "workflows": 0,
240
240
  "hooks": 0,
241
241
  }
@@ -718,7 +718,9 @@ def clean(dry_run: bool, yes: bool):
718
718
  sys.exit(1)
719
719
 
720
720
 
721
- @deps.command(help="Update APM dependencies to latest refs")
721
+ @deps.command(
722
+ help="DEPRECATED: use 'apm update' instead (strict superset). Update APM dependencies to latest refs"
723
+ )
722
724
  @click.argument("packages", nargs=-1)
723
725
  @click.option("--verbose", "-v", is_flag=True, help="Show detailed update information")
724
726
  @click.option(
@@ -914,7 +916,9 @@ def update(packages, verbose, force, target, parallel_downloads, global_, legacy
914
916
  logger.success("All packages already at latest refs.")
915
917
 
916
918
 
917
- @deps.command(help="Show detailed package information")
919
+ @deps.command(
920
+ help="Show detailed package information (alias for 'apm view PACKAGE' for installed packages; prefer 'apm view' in new scripts)"
921
+ )
918
922
  @click.argument("package", required=True)
919
923
  def info(package: str):
920
924
  """Show detailed information about a specific package including context files and workflows."""
@@ -537,13 +537,15 @@ def _read_existing_targets(project_root: Path) -> list[str]:
537
537
  legacy singular ``target:`` CSV/scalar form for backwards compatibility
538
538
  with apm.yml files written before plural became canonical.
539
539
  """
540
- import yaml
541
-
542
540
  apm_yml_path = project_root / APM_YML_FILENAME
543
541
  if not apm_yml_path.exists():
544
542
  return []
545
543
  try:
546
- data = yaml.safe_load(apm_yml_path.read_text(encoding="utf-8"))
544
+ # Bounded loader so a hostile apm.yml cannot wedge target parsing with a
545
+ # merge/alias expansion bomb (fails closed -> empty target list).
546
+ from apm_cli.utils.yaml_io import load_yaml
547
+
548
+ data = load_yaml(apm_yml_path)
547
549
  if not isinstance(data, dict):
548
550
  return []
549
551
  # Canonical plural form
@@ -888,7 +888,8 @@ def _handle_mcp_install(
888
888
  @click.option(
889
889
  "--runtime",
890
890
  help=(
891
- "Target specific runtime only (copilot, claude, codex, cursor, gemini, antigravity, intellij, kiro, opencode, vscode, windsurf)"
891
+ "Target specific runtime only (copilot, claude, codex, cursor, gemini, antigravity, intellij, kiro, opencode, windsurf) "
892
+ "(legacy alias for --target, single value only; prefer --target)"
892
893
  ),
893
894
  )
894
895
  @click.option("--exclude", help="Exclude specific runtime from installation")