apm-cli 0.28.0__tar.gz → 0.29.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 (497) hide show
  1. {apm_cli-0.28.0/src/apm_cli.egg-info → apm_cli-0.29.0}/PKG-INFO +4 -3
  2. {apm_cli-0.28.0 → apm_cli-0.29.0}/README.md +3 -2
  3. {apm_cli-0.28.0 → apm_cli-0.29.0}/pyproject.toml +1 -1
  4. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/base.py +4 -2
  5. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/codex.py +19 -4
  6. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/copilot.py +23 -8
  7. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/cursor.py +2 -0
  8. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/gemini.py +2 -0
  9. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/kiro.py +2 -0
  10. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/vscode.py +2 -0
  11. apm_cli-0.29.0/src/apm_cli/agent_plugins/__init__.py +146 -0
  12. apm_cli-0.29.0/src/apm_cli/agent_plugins/assets.py +368 -0
  13. apm_cli-0.29.0/src/apm_cli/agent_plugins/constants.py +23 -0
  14. apm_cli-0.29.0/src/apm_cli/agent_plugins/errors.py +162 -0
  15. apm_cli-0.29.0/src/apm_cli/agent_plugins/io.py +101 -0
  16. apm_cli-0.29.0/src/apm_cli/agent_plugins/ir.py +196 -0
  17. apm_cli-0.29.0/src/apm_cli/agent_plugins/loader.py +966 -0
  18. apm_cli-0.29.0/src/apm_cli/agent_plugins/projection.py +61 -0
  19. apm_cli-0.29.0/src/apm_cli/agent_plugins/validation.py +690 -0
  20. apm_cli-0.29.0/src/apm_cli/bundle/agent_plugin_exporter.py +521 -0
  21. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/attest.py +1 -1
  22. apm_cli-0.29.0/src/apm_cli/bundle/claude_plugin_exporter.py +32 -0
  23. apm_cli-0.29.0/src/apm_cli/bundle/export_common.py +41 -0
  24. apm_cli-0.29.0/src/apm_cli/bundle/formats.py +147 -0
  25. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/local_bundle.py +158 -18
  26. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/lockfile_enrichment.py +11 -4
  27. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/packer.py +28 -8
  28. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/plugin_exporter.py +63 -53
  29. apm_cli-0.29.0/src/apm_cli/bundle/reproducible_archive.py +79 -0
  30. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/_helpers.py +37 -17
  31. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/compile/cli.py +2 -1
  32. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/deps/_utils.py +26 -4
  33. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/deps/cli.py +59 -2
  34. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/init.py +108 -15
  35. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/install.py +67 -73
  36. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/lock.py +21 -5
  37. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/__init__.py +21 -15
  38. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/check.py +30 -15
  39. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/validate.py +15 -11
  40. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/mcp.py +8 -5
  41. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/pack.py +46 -14
  42. apm_cli-0.29.0/src/apm_cli/commands/plugin/init.py +73 -0
  43. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/prune.py +116 -7
  44. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/uninstall/cli.py +165 -15
  45. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/uninstall/engine.py +184 -77
  46. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/agents_compiler.py +67 -14
  47. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/context_optimizer.py +80 -96
  48. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/distributed_compiler.py +104 -32
  49. apm_cli-0.29.0/src/apm_cli/compilation/inventory.py +122 -0
  50. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/user_root_context.py +39 -12
  51. apm_cli-0.29.0/src/apm_cli/copilot_plugins/__init__.py +54 -0
  52. apm_cli-0.29.0/src/apm_cli/copilot_plugins/capability.py +142 -0
  53. apm_cli-0.29.0/src/apm_cli/copilot_plugins/catalog.py +106 -0
  54. apm_cli-0.29.0/src/apm_cli/copilot_plugins/constants.py +32 -0
  55. apm_cli-0.29.0/src/apm_cli/copilot_plugins/registrar.py +659 -0
  56. apm_cli-0.29.0/src/apm_cli/copilot_plugins/settings.py +306 -0
  57. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/apm_yml.py +11 -3
  58. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/auth.py +25 -7
  59. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/build_orchestrator.py +31 -9
  60. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/command_logger.py +11 -0
  61. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/deployment_ledger.py +24 -0
  62. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/plugin_manifest.py +56 -21
  63. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/script_executors.py +3 -31
  64. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/target_catalog.py +25 -4
  65. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/target_detection.py +11 -19
  66. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/_shared.py +25 -1
  67. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/apm_resolver.py +23 -1
  68. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/artifactory_orchestrator.py +4 -5
  69. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/bare_cache.py +4 -0
  70. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/git_auth_env.py +20 -7
  71. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/github_downloader.py +19 -21
  72. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/lockfile.py +29 -14
  73. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/package_validator.py +12 -6
  74. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/plugin_parser.py +398 -66
  75. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/resolver.py +36 -2
  76. apm_cli-0.29.0/src/apm_cli/hook_contract.py +266 -0
  77. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/context.py +9 -0
  78. apm_cli-0.29.0/src/apm_cli/install/deployable_source_plan.py +264 -0
  79. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/drift.py +55 -7
  80. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/exec_gate.py +74 -7
  81. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/helpers/ref_reuse.py +16 -7
  82. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/helpers/security_scan.py +20 -9
  83. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/integrity.py +27 -0
  84. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/local_bundle_handler.py +249 -59
  85. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/local_bundle_paths.py +4 -0
  86. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/lsp/integration.py +73 -0
  87. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/manifest_reconcile.py +127 -40
  88. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/integration.py +91 -0
  89. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/ownership.py +4 -4
  90. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/registry.py +6 -18
  91. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/warnings.py +29 -17
  92. apm_cli-0.29.0/src/apm_cli/install/native_plugin_admission.py +207 -0
  93. apm_cli-0.29.0/src/apm_cli/install/phases/copilot_plugins.py +198 -0
  94. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/finalize.py +16 -4
  95. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/integrate.py +23 -2
  96. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/pipeline.py +39 -45
  97. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/request.py +1 -0
  98. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/resolution_staging.py +9 -0
  99. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/service.py +77 -4
  100. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/services.py +124 -37
  101. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/sources.py +106 -68
  102. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/template.py +202 -20
  103. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/agent_integrator.py +4 -3
  104. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/base_integrator.py +13 -0
  105. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/canvas_integrator.py +15 -1
  106. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/command_integrator.py +7 -3
  107. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/hook_bundle.py +46 -12
  108. apm_cli-0.29.0/src/apm_cli/integration/hook_command_paths.py +58 -0
  109. apm_cli-0.29.0/src/apm_cli/integration/hook_command_warnings.py +25 -0
  110. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/hook_integrator.py +183 -182
  111. apm_cli-0.29.0/src/apm_cli/integration/hook_ir.py +5 -0
  112. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/hook_native_formats.py +6 -73
  113. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/hook_ownership.py +68 -15
  114. apm_cli-0.29.0/src/apm_cli/integration/hook_reintegration.py +37 -0
  115. apm_cli-0.29.0/src/apm_cli/integration/hook_source_selection.py +188 -0
  116. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/instruction_integrator.py +10 -6
  117. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/kiro_hook_integrator.py +11 -10
  118. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/mcp_config_view.py +33 -6
  119. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/mcp_integrator.py +10 -1
  120. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/prompt_integrator.py +9 -3
  121. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/skill_integrator.py +387 -302
  122. apm_cli-0.29.0/src/apm_cli/integration/skill_package_routing.py +49 -0
  123. apm_cli-0.29.0/src/apm_cli/integration/skill_support.py +97 -0
  124. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/targets.py +14 -0
  125. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/builder.py +21 -1
  126. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/models.py +108 -33
  127. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/validator.py +15 -7
  128. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/yml_schema.py +30 -12
  129. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/apm_package.py +73 -42
  130. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/identity.py +1 -0
  131. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/mcp.py +26 -0
  132. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/reference.py +53 -20
  133. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/format_detection.py +76 -17
  134. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/validation.py +128 -21
  135. apm_cli-0.29.0/src/apm_cli/policy/_gitlab.py +490 -0
  136. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/_help_text.py +2 -2
  137. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/ci_checks.py +83 -6
  138. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/discovery.py +106 -93
  139. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/primitives/discovery.py +131 -27
  140. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/registry/operations.py +1 -1
  141. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/copilot_runtime.py +12 -6
  142. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/executables.py +129 -20
  143. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/gate.py +69 -2
  144. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/content_hash.py +12 -5
  145. apm_cli-0.29.0/src/apm_cli/utils/net.py +58 -0
  146. apm_cli-0.29.0/src/apm_cli/utils/path_security.py +243 -0
  147. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/patterns.py +103 -3
  148. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/yaml_io.py +105 -23
  149. {apm_cli-0.28.0 → apm_cli-0.29.0/src/apm_cli.egg-info}/PKG-INFO +4 -3
  150. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli.egg-info/SOURCES.txt +33 -0
  151. apm_cli-0.28.0/src/apm_cli/commands/plugin/init.py +0 -44
  152. apm_cli-0.28.0/src/apm_cli/integration/hook_ir.py +0 -54
  153. apm_cli-0.28.0/src/apm_cli/utils/path_security.py +0 -130
  154. {apm_cli-0.28.0 → apm_cli-0.29.0}/AUTHORS +0 -0
  155. {apm_cli-0.28.0 → apm_cli-0.29.0}/LICENSE +0 -0
  156. {apm_cli-0.28.0 → apm_cli-0.29.0}/NOTICE +0 -0
  157. {apm_cli-0.28.0 → apm_cli-0.29.0}/setup.cfg +0 -0
  158. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/__init__.py +0 -0
  159. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/__init__.py +0 -0
  160. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/__init__.py +0 -0
  161. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/_mcp_runtime_args.py +0 -0
  162. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/antigravity.py +0 -0
  163. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/claude.py +0 -0
  164. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/hermes.py +0 -0
  165. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/intellij.py +0 -0
  166. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/opencode.py +0 -0
  167. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/client/windsurf.py +0 -0
  168. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
  169. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/package_manager/base.py +0 -0
  170. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
  171. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bootstrap_mirror.py +0 -0
  172. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/__init__.py +0 -0
  173. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/plugin_layout.py +0 -0
  174. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/bundle/unpacker.py +0 -0
  175. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/__init__.py +0 -0
  176. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/git_cache.py +0 -0
  177. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/http_cache.py +0 -0
  178. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/integrity.py +0 -0
  179. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/locking.py +0 -0
  180. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/paths.py +0 -0
  181. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cache/url_normalize.py +0 -0
  182. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/cli.py +0 -0
  183. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/__init__.py +0 -0
  184. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/_apm_yml_writer.py +0 -0
  185. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/approve.py +0 -0
  186. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/audit.py +0 -0
  187. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/cache.py +0 -0
  188. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/compile/__init__.py +0 -0
  189. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/compile/watcher.py +0 -0
  190. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/config.py +0 -0
  191. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/deps/__init__.py +0 -0
  192. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/deps/why.py +0 -0
  193. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/doctor.py +0 -0
  194. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/experimental.py +0 -0
  195. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/find.py +0 -0
  196. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/lifecycle.py +0 -0
  197. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/list_cmd.py +0 -0
  198. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/audit.py +0 -0
  199. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/doctor.py +0 -0
  200. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/init.py +0 -0
  201. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/migrate.py +0 -0
  202. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/outdated.py +0 -0
  203. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/plugin/__init__.py +0 -0
  204. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/plugin/add.py +0 -0
  205. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/plugin/remove.py +0 -0
  206. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/marketplace/plugin/set.py +0 -0
  207. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/outdated.py +0 -0
  208. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/plugin/__init__.py +0 -0
  209. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/policy.py +0 -0
  210. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/publish.py +0 -0
  211. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/run.py +0 -0
  212. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/runtime.py +0 -0
  213. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/self_update.py +0 -0
  214. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/targets.py +0 -0
  215. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/uninstall/__init__.py +0 -0
  216. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/uninstall/lockfile_state.py +0 -0
  217. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/update.py +0 -0
  218. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/commands/view.py +0 -0
  219. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/__init__.py +0 -0
  220. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/build_id.py +0 -0
  221. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/claude_formatter.py +0 -0
  222. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/constants.py +0 -0
  223. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/constitution.py +0 -0
  224. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/constitution_block.py +0 -0
  225. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/gemini_formatter.py +0 -0
  226. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/injector.py +0 -0
  227. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/link_resolver.py +0 -0
  228. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/managed_section.py +0 -0
  229. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/output_writer.py +0 -0
  230. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/compilation/template_builder.py +0 -0
  231. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/config.py +0 -0
  232. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/constants.py +0 -0
  233. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/__init__.py +0 -0
  234. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/_child_tls/__init__.py +0 -0
  235. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/_child_tls/_apm_tls.pth +0 -0
  236. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/_child_tls/_apm_tls_bootstrap.py +0 -0
  237. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/azure_cli.py +0 -0
  238. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/conflict_detector.py +0 -0
  239. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/deployment_state.py +0 -0
  240. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/docker_args.py +0 -0
  241. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/errors.py +0 -0
  242. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/experimental.py +0 -0
  243. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/host_providers.py +0 -0
  244. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/install_audit.py +0 -0
  245. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/lifecycle_scripts.py +0 -0
  246. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/null_logger.py +0 -0
  247. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/operations.py +0 -0
  248. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/output_mode.py +0 -0
  249. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/project_name.py +0 -0
  250. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/safe_installer.py +0 -0
  251. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/scope.py +0 -0
  252. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/script_runner.py +0 -0
  253. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/script_trust.py +0 -0
  254. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/tls_trust.py +0 -0
  255. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/core/token_manager.py +0 -0
  256. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/__init__.py +0 -0
  257. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/aggregator.py +0 -0
  258. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/artifactory_entry.py +0 -0
  259. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/clone_engine.py +0 -0
  260. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/dependency_graph.py +0 -0
  261. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/download_strategies.py +0 -0
  262. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/git_file_transport.py +0 -0
  263. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/git_reference_resolver.py +0 -0
  264. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/git_remote_ops.py +0 -0
  265. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/git_semver_resolver.py +0 -0
  266. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/github_downloader_validation.py +0 -0
  267. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/github_rate_limit.py +0 -0
  268. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/host_backends.py +0 -0
  269. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/installed_package.py +0 -0
  270. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/outdated_ref_cache.py +0 -0
  271. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/outdated_row.py +0 -0
  272. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/path_anchoring.py +0 -0
  273. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/reachability.py +0 -0
  274. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/__init__.py +0 -0
  275. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/auth.py +0 -0
  276. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/client.py +0 -0
  277. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/config_loader.py +0 -0
  278. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/extractor.py +0 -0
  279. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/feature_gate.py +0 -0
  280. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/outdated.py +0 -0
  281. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry/semver.py +0 -0
  282. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/registry_proxy.py +0 -0
  283. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/revision_pins.py +0 -0
  284. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/shared_clone_cache.py +0 -0
  285. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/tiered_ref_resolver.py +0 -0
  286. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/transport_selection.py +0 -0
  287. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/verifier.py +0 -0
  288. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/deps/why_walker.py +0 -0
  289. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/drift.py +0 -0
  290. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/__init__.py +0 -0
  291. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/authoring.py +0 -0
  292. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/declared_license.py +0 -0
  293. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/formats.py +0 -0
  294. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/purl.py +0 -0
  295. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/sbom.py +0 -0
  296. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/spdx.py +0 -0
  297. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/export/spdx_data.py +0 -0
  298. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/factory.py +0 -0
  299. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/__init__.py +0 -0
  300. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/argv.py +0 -0
  301. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/artifactory_resolver.py +0 -0
  302. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/audit_replay.py +0 -0
  303. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/cache_pin.py +0 -0
  304. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/deployed_paths.py +0 -0
  305. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/drift_render.py +0 -0
  306. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/errors.py +0 -0
  307. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/gitlab_resolver.py +0 -0
  308. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/heals/__init__.py +0 -0
  309. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/heals/base.py +0 -0
  310. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/heals/branch_ref_drift.py +0 -0
  311. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/heals/buggy_lockfile_recovery.py +0 -0
  312. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/helpers/__init__.py +0 -0
  313. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/helpers/no_work.py +0 -0
  314. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/helpers/ref_seed.py +0 -0
  315. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/insecure_policy.py +0 -0
  316. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/lsp/__init__.py +0 -0
  317. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/__init__.py +0 -0
  318. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/args.py +0 -0
  319. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/command.py +0 -0
  320. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/conflicts.py +0 -0
  321. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/entry.py +0 -0
  322. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/mcp/writer.py +0 -0
  323. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/outcome.py +0 -0
  324. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/package_resolution.py +0 -0
  325. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/package_selection.py +0 -0
  326. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/__init__.py +0 -0
  327. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/_redownload.py +0 -0
  328. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/_skip_logic.py +0 -0
  329. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/audit.py +0 -0
  330. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/cleanup.py +0 -0
  331. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/download.py +0 -0
  332. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/heal.py +0 -0
  333. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/local_content.py +0 -0
  334. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/lockfile.py +0 -0
  335. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/policy_gate.py +0 -0
  336. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/policy_target_check.py +0 -0
  337. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/post_deps_local.py +0 -0
  338. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/resolve.py +0 -0
  339. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/phases/targets.py +0 -0
  340. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/plan.py +0 -0
  341. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/presentation/__init__.py +0 -0
  342. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/presentation/dry_run.py +0 -0
  343. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/registry_wiring.py +0 -0
  344. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/root_redirect.py +0 -0
  345. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/service_integration.py +0 -0
  346. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/skill_path_migration.py +0 -0
  347. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/summary.py +0 -0
  348. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/target_filter.py +0 -0
  349. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/target_hints.py +0 -0
  350. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/target_warnings.py +0 -0
  351. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/transaction.py +0 -0
  352. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/install/validation.py +0 -0
  353. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/__init__.py +0 -0
  354. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/_hook_dropped_targets.py +0 -0
  355. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/_shared.py +0 -0
  356. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/cleanup.py +0 -0
  357. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/copilot_app_db.py +0 -0
  358. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/copilot_app_project.py +0 -0
  359. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/copilot_app_workflow_integrator.py +0 -0
  360. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/copilot_app_ws.py +0 -0
  361. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/copilot_cowork_paths.py +0 -0
  362. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/coverage.py +0 -0
  363. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/dispatch.py +0 -0
  364. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/hook_file_routing.py +0 -0
  365. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/lsp_integrator.py +0 -0
  366. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/mcp_integrator_install.py +0 -0
  367. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/opencode_frontmatter.py +0 -0
  368. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/skill_transformer.py +0 -0
  369. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/integration/utils.py +0 -0
  370. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/__init__.py +0 -0
  371. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/_git_utils.py +0 -0
  372. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/_io.py +0 -0
  373. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/_shared.py +0 -0
  374. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/audit.py +0 -0
  375. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/auth_helpers.py +0 -0
  376. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/client.py +0 -0
  377. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/diagnostics.py +0 -0
  378. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/drift_check.py +0 -0
  379. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/errors.py +0 -0
  380. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/git_stderr.py +0 -0
  381. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/init_template.py +0 -0
  382. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/migration.py +0 -0
  383. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/output_mappers.py +0 -0
  384. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/output_profiles.py +0 -0
  385. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/ref_resolver.py +0 -0
  386. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/registry.py +0 -0
  387. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/resolver.py +0 -0
  388. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/semver.py +0 -0
  389. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/shadow_detector.py +0 -0
  390. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/tag_pattern.py +0 -0
  391. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/version_check.py +0 -0
  392. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/version_pins.py +0 -0
  393. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/version_resolver.py +0 -0
  394. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/marketplace/yml_editor.py +0 -0
  395. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/__init__.py +0 -0
  396. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/__init__.py +0 -0
  397. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/lsp.py +0 -0
  398. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/materialization.py +0 -0
  399. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/object_fields.py +0 -0
  400. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/provider_coordinates.py +0 -0
  401. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/registry_entry.py +0 -0
  402. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/selection.py +0 -0
  403. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/subsets.py +0 -0
  404. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/dependency/types.py +0 -0
  405. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/manifest_contract.py +0 -0
  406. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/plugin.py +0 -0
  407. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/models/results.py +0 -0
  408. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/output/__init__.py +0 -0
  409. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/output/formatters.py +0 -0
  410. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/output/models.py +0 -0
  411. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/output/script_formatters.py +0 -0
  412. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/__init__.py +0 -0
  413. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/_constraint_pinning.py +0 -0
  414. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/_shared.py +0 -0
  415. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/inheritance.py +0 -0
  416. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/install_preflight.py +0 -0
  417. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/matcher.py +0 -0
  418. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/models.py +0 -0
  419. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/outcome_routing.py +0 -0
  420. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/parser.py +0 -0
  421. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/policy_checks.py +0 -0
  422. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/project_config.py +0 -0
  423. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/policy/schema.py +0 -0
  424. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/primitives/__init__.py +0 -0
  425. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/primitives/models.py +0 -0
  426. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/primitives/parser.py +0 -0
  427. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/registry/__init__.py +0 -0
  428. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/registry/client.py +0 -0
  429. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/registry/integration.py +0 -0
  430. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/__init__.py +0 -0
  431. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/base.py +0 -0
  432. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/codex_runtime.py +0 -0
  433. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/factory.py +0 -0
  434. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/llm_runtime.py +0 -0
  435. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/manager.py +0 -0
  436. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/registry.py +0 -0
  437. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/runtime/utils.py +0 -0
  438. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/__init__.py +0 -0
  439. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/audit_report.py +0 -0
  440. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/content_scanner.py +0 -0
  441. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/__init__.py +0 -0
  442. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/base.py +0 -0
  443. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/gate.py +0 -0
  444. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/generic_sarif.py +0 -0
  445. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/options.py +0 -0
  446. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/registry.py +0 -0
  447. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/runner.py +0 -0
  448. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/sarif_ingest.py +0 -0
  449. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/external/skillspector.py +0 -0
  450. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/security/file_scanner.py +0 -0
  451. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/update_policy.py +0 -0
  452. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/__init__.py +0 -0
  453. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/archive.py +0 -0
  454. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/atomic_io.py +0 -0
  455. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/console.py +0 -0
  456. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/diagnostics.py +0 -0
  457. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/exclude.py +0 -0
  458. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/file_ops.py +0 -0
  459. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/git_env.py +0 -0
  460. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/git_sparse.py +0 -0
  461. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/github_host.py +0 -0
  462. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/guards.py +0 -0
  463. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/helpers.py +0 -0
  464. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/install_tui.py +0 -0
  465. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/normalization.py +0 -0
  466. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/paths.py +0 -0
  467. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/perf_stats.py +0 -0
  468. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/reflink.py +0 -0
  469. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/short_sha.py +0 -0
  470. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/subprocess_env.py +0 -0
  471. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/utils/version_checker.py +0 -0
  472. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/version.py +0 -0
  473. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/workflow/__init__.py +0 -0
  474. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/workflow/discovery.py +0 -0
  475. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/workflow/parser.py +0 -0
  476. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli/workflow/runner.py +0 -0
  477. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli.egg-info/dependency_links.txt +0 -0
  478. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli.egg-info/entry_points.txt +0 -0
  479. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli.egg-info/requires.txt +0 -0
  480. {apm_cli-0.28.0 → apm_cli-0.29.0}/src/apm_cli.egg-info/top_level.txt +0 -0
  481. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_apm_package_models.py +0 -0
  482. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_apm_resolver.py +0 -0
  483. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_codex_docker_args_fix.py +0 -0
  484. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_codex_empty_string_and_defaults.py +0 -0
  485. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_collision_integration.py +0 -0
  486. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_console.py +0 -0
  487. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_distributed_compilation.py +0 -0
  488. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_empty_string_and_defaults.py +0 -0
  489. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_enhanced_discovery.py +0 -0
  490. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_github_downloader.py +0 -0
  491. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_github_downloader_token_precedence.py +0 -0
  492. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_gitlab_git_transport.py +0 -0
  493. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_lockfile.py +0 -0
  494. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_runnable_prompts.py +0 -0
  495. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_runtime_manager_token_precedence.py +0 -0
  496. {apm_cli-0.28.0 → apm_cli-0.29.0}/tests/test_token_manager.py +0 -0
  497. {apm_cli-0.28.0 → apm_cli-0.29.0}/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.28.0
3
+ Version: 0.29.0
4
4
  Summary: MCP configuration tool
5
5
  Author-email: Daniel Meppiel <user@example.com>
6
6
  License: MIT License
@@ -78,7 +78,7 @@ Think `package.json`, `requirements.txt`, or `Cargo.toml` — but for AI agent c
78
78
 
79
79
  GitHub Copilot | Claude Code | Grok Build | Cursor | OpenCode | Codex | Gemini | Windsurf | Kiro
80
80
 
81
- **[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/)** · **[Roadmap](https://github.com/orgs/microsoft/projects/2304)**
81
+ **[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/)** · **[v0.29 Roadmap](https://github.com/microsoft/apm/milestone/17)**
82
82
 
83
83
  ---
84
84
 
@@ -239,7 +239,8 @@ Use agentrc to author high-quality instructions, then package them with APM to s
239
239
 
240
240
  Created by [@danielmeppiel](https://github.com/danielmeppiel). Maintained by [@danielmeppiel](https://github.com/danielmeppiel) and [@sergio-sisternes-epam](https://github.com/sergio-sisternes-epam).
241
241
 
242
- - [Roadmap & Discussions](https://github.com/microsoft/apm/discussions/116)
242
+ - [v0.29 Roadmap](https://github.com/microsoft/apm/milestone/17)
243
+ - [Discussions](https://github.com/microsoft/apm/discussions)
243
244
  - [Contributing](CONTRIBUTING.md)
244
245
  - [AI Native Development guide](https://danielmeppiel.github.io/awesome-ai-native) — a practical learning path for AI-native development
245
246
 
@@ -6,7 +6,7 @@ Think `package.json`, `requirements.txt`, or `Cargo.toml` — but for AI agent c
6
6
 
7
7
  GitHub Copilot | Claude Code | Grok Build | Cursor | OpenCode | Codex | Gemini | Windsurf | Kiro
8
8
 
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/)** · **[Roadmap](https://github.com/orgs/microsoft/projects/2304)**
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/)** · **[v0.29 Roadmap](https://github.com/microsoft/apm/milestone/17)**
10
10
 
11
11
  ---
12
12
 
@@ -167,7 +167,8 @@ Use agentrc to author high-quality instructions, then package them with APM to s
167
167
 
168
168
  Created by [@danielmeppiel](https://github.com/danielmeppiel). Maintained by [@danielmeppiel](https://github.com/danielmeppiel) and [@sergio-sisternes-epam](https://github.com/sergio-sisternes-epam).
169
169
 
170
- - [Roadmap & Discussions](https://github.com/microsoft/apm/discussions/116)
170
+ - [v0.29 Roadmap](https://github.com/microsoft/apm/milestone/17)
171
+ - [Discussions](https://github.com/microsoft/apm/discussions)
171
172
  - [Contributing](CONTRIBUTING.md)
172
173
  - [AI Native Development guide](https://danielmeppiel.github.io/awesome-ai-native) — a practical learning path for AI-native development
173
174
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "apm-cli"
7
- version = "0.28.0"
7
+ version = "0.29.0"
8
8
  description = "MCP configuration tool"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -7,7 +7,7 @@ from dataclasses import dataclass
7
7
  from pathlib import Path
8
8
  from typing import Any, ClassVar
9
9
 
10
- from ...models.dependency.mcp import _RESERVED_EXTRA_KEYS
10
+ from ...models.dependency.mcp import _RESERVED_EXTRA_KEYS, TrustedEnvLiteral
11
11
  from ...utils.console import _rich_error, _rich_warning
12
12
 
13
13
  _INPUT_VAR_RE = re.compile(r"\$\{input:([^}]+)\}")
@@ -1087,7 +1087,9 @@ class MCPClientAdapter(ABC):
1087
1087
  if not isinstance(raw_value, str):
1088
1088
  translated[name] = raw_value
1089
1089
  continue
1090
- if _has_env_placeholder(raw_value):
1090
+ if isinstance(raw_value, TrustedEnvLiteral):
1091
+ translated[name] = raw_value
1092
+ elif _has_env_placeholder(raw_value):
1091
1093
  self._last_legacy_angle_vars.update(_extract_legacy_angle_vars(raw_value))
1092
1094
  translated[name] = self._translate_env_placeholder_for_runtime(raw_value)
1093
1095
  placeholder_keys.extend(
@@ -12,6 +12,7 @@ from ...registry.client import SimpleRegistryClient
12
12
  from ...registry.integration import RegistryIntegration
13
13
  from ...utils.atomic_io import atomic_write_text
14
14
  from ...utils.console import _rich_success, _rich_warning
15
+ from ...utils.net import is_loopback_host
15
16
  from ...utils.path_security import PathTraversalError
16
17
  from ._mcp_runtime_args import process_v01_value_hint_arg
17
18
  from .base import MCPClientAdapter
@@ -216,6 +217,8 @@ class CodexClientAdapter(MCPClientAdapter):
216
217
  raw = server_info.get("_raw_stdio")
217
218
  if raw:
218
219
  config["command"] = raw["command"]
220
+ if raw.get("cwd") is not None:
221
+ config["cwd"] = raw["cwd"]
219
222
  resolved_env_for_args: dict = {}
220
223
  if raw.get("env"):
221
224
  resolved_env_for_args = self._resolve_environment_variables(
@@ -239,7 +242,8 @@ class CodexClientAdapter(MCPClientAdapter):
239
242
  # Precedence on Codex when a server publishes BOTH a remote and a stdio
240
243
  # package: prefer the stdio package (falls through to the packages branch
241
244
  # below). The remote-only branch here handles the streamable-http path
242
- # and rejects SSE / non-https / empty-url remotes with explicit warnings.
245
+ # and rejects SSE / non-https (except loopback http) / empty-url remotes
246
+ # with explicit warnings.
243
247
  remotes = server_info.get("remotes", [])
244
248
  packages = server_info.get("packages", [])
245
249
  if remotes and not packages:
@@ -263,11 +267,22 @@ class CodexClientAdapter(MCPClientAdapter):
263
267
  )
264
268
  return None
265
269
 
266
- scheme = urlparse(remote_url).scheme.lower()
267
- if scheme != "https":
270
+ try:
271
+ parsed_remote = urlparse(remote_url)
272
+ scheme = parsed_remote.scheme.lower()
273
+ insecure_loopback = scheme == "http" and is_loopback_host(parsed_remote.hostname)
274
+ except ValueError:
275
+ scheme = ""
276
+ insecure_loopback = False
277
+ # Codex CLI itself accepts plain-http loopback URLs (its docs use
278
+ # http://localhost examples), and local dev servers rarely carry
279
+ # certs -- so loopback http is allowed. Any other non-https host is
280
+ # still rejected to avoid cleartext bearer tokens in transit.
281
+ if scheme != "https" and not insecure_loopback:
268
282
  _rich_warning(
269
283
  f"Skipping MCP server '{server_name}' for Codex CLI: remote URL "
270
- f"must use https:// (got {scheme or 'no scheme'}).",
284
+ f"must use https:// (got {scheme or 'no scheme'}). "
285
+ "Plain http is allowed for loopback addresses only.",
271
286
  symbol="warning",
272
287
  )
273
288
  return None
@@ -1,8 +1,8 @@
1
1
  """GitHub Copilot CLI implementation of MCP client adapter.
2
2
 
3
- This adapter implements the Copilot CLI-specific handling of MCP server configuration,
4
- targeting the global ~/.copilot/mcp-config.json file as specified in the MCP installation
5
- architecture specification.
3
+ This adapter implements the Copilot-specific handling of MCP server configuration.
4
+ At project scope it targets .github/mcp.json (read by Copilot CLI); at user scope
5
+ it targets the global ~/.copilot/mcp-config.json file.
6
6
  """
7
7
 
8
8
  import json
@@ -13,6 +13,7 @@ from typing import ClassVar
13
13
  import click
14
14
 
15
15
  from ...core.token_manager import GitHubTokenManager
16
+ from ...models.dependency.mcp import TrustedEnvLiteral
16
17
  from ...registry.client import SimpleRegistryClient
17
18
  from ...registry.integration import RegistryIntegration
18
19
  from ...utils.console import _rich_warning
@@ -103,13 +104,23 @@ class CopilotClientAdapter(MCPClientAdapter):
103
104
  self.registry_integration = RegistryIntegration(registry_url)
104
105
 
105
106
  def get_config_path(self):
106
- """Get the path to the Copilot CLI MCP configuration file.
107
+ """Get the path to the Copilot MCP configuration file.
108
+
109
+ At user scope returns the global Copilot CLI config so MCP servers are
110
+ available across all projects. At project scope returns the per-repo
111
+ .github/mcp.json path that Copilot CLI reads since deprecating
112
+ .vscode/mcp.json.
107
113
 
108
114
  Returns:
109
- str: Path to ~/.copilot/mcp-config.json
115
+ str: Path to the MCP configuration file.
110
116
  """
111
- copilot_dir = Path.home() / ".copilot"
112
- return str(copilot_dir / "mcp-config.json")
117
+ if self.user_scope:
118
+ configured_home = os.environ.get("COPILOT_HOME", "").strip()
119
+ copilot_home = (
120
+ Path(configured_home).expanduser() if configured_home else Path.home() / ".copilot"
121
+ )
122
+ return str(copilot_home / "mcp-config.json")
123
+ return str(self.project_root / ".github" / "mcp.json")
113
124
 
114
125
  def update_config(self, config_updates):
115
126
  """Update the Copilot CLI MCP configuration.
@@ -423,6 +434,8 @@ class CopilotClientAdapter(MCPClientAdapter):
423
434
  raw = server_info.get("_raw_stdio")
424
435
  if raw:
425
436
  config["command"] = raw["command"]
437
+ if raw.get("cwd") is not None:
438
+ config["cwd"] = raw["cwd"]
426
439
  resolved_env_for_args = {}
427
440
  if raw.get("env"):
428
441
  resolved_env_for_args = self._resolve_environment_variables(
@@ -723,7 +736,9 @@ class CopilotClientAdapter(MCPClientAdapter):
723
736
  if not isinstance(raw_value, str):
724
737
  translated[name] = _stringify_env_literal(raw_value)
725
738
  continue
726
- if _has_env_placeholder(raw_value):
739
+ if isinstance(raw_value, TrustedEnvLiteral):
740
+ translated[name] = raw_value
741
+ elif _has_env_placeholder(raw_value):
727
742
  self._last_legacy_angle_vars.update(_extract_legacy_angle_vars(raw_value))
728
743
  translated[name] = self._translate_env_placeholder_for_runtime(raw_value)
729
744
  for match in _ENV_VAR_RE.finditer(translated[name]):
@@ -134,6 +134,8 @@ class CursorClientAdapter(CopilotClientAdapter):
134
134
  if raw:
135
135
  config["type"] = "stdio"
136
136
  config["command"] = raw["command"]
137
+ if raw.get("cwd") is not None:
138
+ config["cwd"] = raw["cwd"]
137
139
  resolved_env_for_args: dict = {}
138
140
  if raw.get("env"):
139
141
  resolved_env_for_args = self._resolve_environment_variables(
@@ -148,6 +148,8 @@ class GeminiClientAdapter(CopilotClientAdapter):
148
148
  raw = server_info.get("_raw_stdio")
149
149
  if raw:
150
150
  config["command"] = raw["command"]
151
+ if raw.get("cwd") is not None:
152
+ config["cwd"] = raw["cwd"]
151
153
  resolved_env_for_args: dict = {}
152
154
  if raw.get("env"):
153
155
  resolved_env_for_args = self._resolve_environment_variables(
@@ -116,6 +116,8 @@ class KiroClientAdapter(CopilotClientAdapter):
116
116
  raw = server_info.get("_raw_stdio")
117
117
  if raw:
118
118
  config: dict[str, Any] = {"command": raw["command"]}
119
+ if raw.get("cwd") is not None:
120
+ config["cwd"] = raw["cwd"]
119
121
  resolved_env_for_args: dict[str, Any] = {}
120
122
  if raw.get("env"):
121
123
  resolved_env_for_args = self._resolve_environment_variables(
@@ -277,6 +277,8 @@ class VSCodeClientAdapter(MCPClientAdapter):
277
277
  "command": raw["command"],
278
278
  "args": raw["args"],
279
279
  }
280
+ if raw.get("cwd") is not None:
281
+ server_config["cwd"] = raw["cwd"]
280
282
  if raw.get("env"):
281
283
  # Translate bare ${VAR} -> ${env:VAR} so VS Code's runtime env
282
284
  # interpolation resolves them at server-start. ${input:...}
@@ -0,0 +1,146 @@
1
+ """Agent Plugins v1 contract helpers."""
2
+
3
+ from .assets import AssetInventoryError, open_verified_asset
4
+ from .constants import (
5
+ AGENT_PLUGINS_SCHEMA_PREFIX,
6
+ AGENT_PLUGINS_SITE_COMMIT,
7
+ AGENT_PLUGINS_SPEC_COMMIT,
8
+ AGENT_PLUGINS_SPEC_SHA256,
9
+ AGENT_PLUGINS_VERSION,
10
+ COM_MICROSOFT_APM_NAMESPACE,
11
+ COM_MICROSOFT_APM_SCHEMA_VERSION,
12
+ MAX_COMPONENT_ASSET_BYTES,
13
+ MAX_COMPONENT_ASSET_ENTRIES,
14
+ MCP_SCHEMA_ID,
15
+ MCP_SCHEMA_SHA256,
16
+ PLUGIN_SCHEMA_ID,
17
+ PLUGIN_SCHEMA_SHA256,
18
+ SUPPORTED_MCP_SCHEMA_IDS,
19
+ SUPPORTED_PLUGIN_SCHEMA_IDS,
20
+ )
21
+ from .errors import (
22
+ AgentPluginDeploymentBoundaryError,
23
+ AgentPluginError,
24
+ AgentPluginLegacyBoundaryError,
25
+ AgentPluginManifestAuthorityError,
26
+ AgentPluginManifestError,
27
+ NotAgentPluginError,
28
+ UnsupportedAgentPluginVersionError,
29
+ )
30
+ from .io import MAX_JSON_BYTES, read_json_document
31
+ from .ir import (
32
+ AgentPlugin,
33
+ AgentPluginAsset,
34
+ AgentPluginComponents,
35
+ AgentPluginDetection,
36
+ AgentPluginDiagnostic,
37
+ AgentPluginExecutable,
38
+ AgentPluginIdentity,
39
+ AgentPluginMcpServer,
40
+ AgentPluginSkill,
41
+ ApmConfiguration,
42
+ ApmExtensionData,
43
+ DiagnosticSeverity,
44
+ FrozenJsonArray,
45
+ FrozenJsonObject,
46
+ FrozenJsonValue,
47
+ JsonValue,
48
+ McpServerType,
49
+ SourceProvenance,
50
+ thaw_frozen_json,
51
+ )
52
+ from .loader import (
53
+ admit_legacy_plugin_manifest,
54
+ detect_agent_plugin,
55
+ load_agent_plugin,
56
+ reject_agent_plugin_legacy_normalization,
57
+ )
58
+ from .validation import (
59
+ ValidationResult,
60
+ args_contain_literal_secret,
61
+ contains_literal_secret_fields,
62
+ is_agent_plugin_schema_id,
63
+ schema_version_from_id,
64
+ supports_mcp_schema_id,
65
+ supports_plugin_schema_id,
66
+ url_contains_literal_secret,
67
+ validate_mcp_config_document,
68
+ validate_mcp_config_file,
69
+ validate_plugin_manifest_document,
70
+ validate_plugin_manifest_file,
71
+ )
72
+
73
+
74
+ def __getattr__(name: str) -> object:
75
+ """Lazily expose compatibility projection without a models import cycle."""
76
+ if name != "project_agent_plugin_package":
77
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
78
+ from .projection import project_agent_plugin_package
79
+
80
+ return project_agent_plugin_package
81
+
82
+
83
+ __all__ = [
84
+ "AGENT_PLUGINS_SCHEMA_PREFIX",
85
+ "AGENT_PLUGINS_SITE_COMMIT",
86
+ "AGENT_PLUGINS_SPEC_COMMIT",
87
+ "AGENT_PLUGINS_SPEC_SHA256",
88
+ "AGENT_PLUGINS_VERSION",
89
+ "COM_MICROSOFT_APM_NAMESPACE",
90
+ "COM_MICROSOFT_APM_SCHEMA_VERSION",
91
+ "MAX_COMPONENT_ASSET_BYTES",
92
+ "MAX_COMPONENT_ASSET_ENTRIES",
93
+ "MAX_JSON_BYTES",
94
+ "MCP_SCHEMA_ID",
95
+ "MCP_SCHEMA_SHA256",
96
+ "PLUGIN_SCHEMA_ID",
97
+ "PLUGIN_SCHEMA_SHA256",
98
+ "SUPPORTED_MCP_SCHEMA_IDS",
99
+ "SUPPORTED_PLUGIN_SCHEMA_IDS",
100
+ "AgentPlugin",
101
+ "AgentPluginAsset",
102
+ "AgentPluginComponents",
103
+ "AgentPluginDeploymentBoundaryError",
104
+ "AgentPluginDetection",
105
+ "AgentPluginDiagnostic",
106
+ "AgentPluginError",
107
+ "AgentPluginExecutable",
108
+ "AgentPluginIdentity",
109
+ "AgentPluginLegacyBoundaryError",
110
+ "AgentPluginManifestAuthorityError",
111
+ "AgentPluginManifestError",
112
+ "AgentPluginMcpServer",
113
+ "AgentPluginSkill",
114
+ "ApmConfiguration",
115
+ "ApmExtensionData",
116
+ "AssetInventoryError",
117
+ "DiagnosticSeverity",
118
+ "FrozenJsonArray",
119
+ "FrozenJsonObject",
120
+ "FrozenJsonValue",
121
+ "JsonValue",
122
+ "McpServerType",
123
+ "NotAgentPluginError",
124
+ "SourceProvenance",
125
+ "UnsupportedAgentPluginVersionError",
126
+ "ValidationResult",
127
+ "admit_legacy_plugin_manifest",
128
+ "args_contain_literal_secret",
129
+ "contains_literal_secret_fields",
130
+ "detect_agent_plugin",
131
+ "is_agent_plugin_schema_id",
132
+ "load_agent_plugin",
133
+ "open_verified_asset",
134
+ "project_agent_plugin_package",
135
+ "read_json_document",
136
+ "reject_agent_plugin_legacy_normalization",
137
+ "schema_version_from_id",
138
+ "supports_mcp_schema_id",
139
+ "supports_plugin_schema_id",
140
+ "thaw_frozen_json",
141
+ "url_contains_literal_secret",
142
+ "validate_mcp_config_document",
143
+ "validate_mcp_config_file",
144
+ "validate_plugin_manifest_document",
145
+ "validate_plugin_manifest_file",
146
+ ]