apm-cli 0.9.4__tar.gz → 0.10.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 (252) hide show
  1. {apm_cli-0.9.4/src/apm_cli.egg-info → apm_cli-0.10.0}/PKG-INFO +11 -1
  2. {apm_cli-0.9.4 → apm_cli-0.10.0}/README.md +9 -0
  3. {apm_cli-0.9.4 → apm_cli-0.10.0}/pyproject.toml +2 -1
  4. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/_helpers.py +12 -0
  5. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/config.py +99 -1
  6. apm_cli-0.10.0/src/apm_cli/commands/marketplace.py +2064 -0
  7. apm_cli-0.10.0/src/apm_cli/commands/marketplace_plugin.py +395 -0
  8. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/uninstall/engine.py +34 -2
  9. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/config.py +63 -0
  10. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/experimental.py +15 -0
  11. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/target_detection.py +7 -1
  12. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/context.py +5 -0
  13. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/integrate.py +74 -0
  14. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/targets.py +77 -5
  15. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/services.py +83 -5
  16. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/template.py +1 -0
  17. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/validation.py +69 -29
  18. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/base_integrator.py +73 -2
  19. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/cleanup.py +84 -7
  20. apm_cli-0.10.0/src/apm_cli/integration/copilot_cowork_paths.py +241 -0
  21. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/skill_integrator.py +81 -12
  22. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/targets.py +147 -11
  23. apm_cli-0.10.0/src/apm_cli/marketplace/__init__.py +90 -0
  24. apm_cli-0.10.0/src/apm_cli/marketplace/_git_utils.py +19 -0
  25. apm_cli-0.10.0/src/apm_cli/marketplace/_io.py +30 -0
  26. apm_cli-0.10.0/src/apm_cli/marketplace/builder.py +730 -0
  27. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/marketplace/client.py +2 -1
  28. apm_cli-0.10.0/src/apm_cli/marketplace/errors.py +128 -0
  29. apm_cli-0.10.0/src/apm_cli/marketplace/git_stderr.py +178 -0
  30. apm_cli-0.10.0/src/apm_cli/marketplace/init_template.py +82 -0
  31. apm_cli-0.10.0/src/apm_cli/marketplace/pr_integration.py +482 -0
  32. apm_cli-0.10.0/src/apm_cli/marketplace/publisher.py +895 -0
  33. apm_cli-0.10.0/src/apm_cli/marketplace/ref_resolver.py +332 -0
  34. apm_cli-0.10.0/src/apm_cli/marketplace/semver.py +242 -0
  35. apm_cli-0.10.0/src/apm_cli/marketplace/tag_pattern.py +103 -0
  36. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/marketplace/version_pins.py +17 -1
  37. apm_cli-0.10.0/src/apm_cli/marketplace/yml_editor.py +268 -0
  38. apm_cli-0.10.0/src/apm_cli/marketplace/yml_schema.py +473 -0
  39. {apm_cli-0.9.4 → apm_cli-0.10.0/src/apm_cli.egg-info}/PKG-INFO +11 -1
  40. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli.egg-info/SOURCES.txt +14 -0
  41. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli.egg-info/requires.txt +1 -0
  42. apm_cli-0.9.4/src/apm_cli/commands/marketplace.py +0 -556
  43. apm_cli-0.9.4/src/apm_cli/marketplace/__init__.py +0 -28
  44. apm_cli-0.9.4/src/apm_cli/marketplace/errors.py +0 -44
  45. {apm_cli-0.9.4 → apm_cli-0.10.0}/AUTHORS +0 -0
  46. {apm_cli-0.9.4 → apm_cli-0.10.0}/LICENSE +0 -0
  47. {apm_cli-0.9.4 → apm_cli-0.10.0}/setup.cfg +0 -0
  48. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/__init__.py +0 -0
  49. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/__init__.py +0 -0
  50. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/client/__init__.py +0 -0
  51. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/client/base.py +0 -0
  52. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/client/codex.py +0 -0
  53. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/client/copilot.py +0 -0
  54. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/client/cursor.py +0 -0
  55. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/client/gemini.py +0 -0
  56. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/client/opencode.py +0 -0
  57. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/client/vscode.py +0 -0
  58. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
  59. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/package_manager/base.py +0 -0
  60. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
  61. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/bundle/__init__.py +0 -0
  62. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/bundle/lockfile_enrichment.py +0 -0
  63. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/bundle/packer.py +0 -0
  64. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/bundle/plugin_exporter.py +0 -0
  65. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/bundle/unpacker.py +0 -0
  66. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/cli.py +0 -0
  67. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/__init__.py +0 -0
  68. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/_apm_yml_writer.py +0 -0
  69. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/audit.py +0 -0
  70. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/compile/__init__.py +0 -0
  71. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/compile/cli.py +0 -0
  72. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/compile/watcher.py +0 -0
  73. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/deps/__init__.py +0 -0
  74. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/deps/_utils.py +0 -0
  75. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/deps/cli.py +0 -0
  76. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/experimental.py +0 -0
  77. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/init.py +0 -0
  78. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/install.py +0 -0
  79. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/list_cmd.py +0 -0
  80. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/mcp.py +0 -0
  81. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/outdated.py +0 -0
  82. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/pack.py +0 -0
  83. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/policy.py +0 -0
  84. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/prune.py +0 -0
  85. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/run.py +0 -0
  86. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/runtime.py +0 -0
  87. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/uninstall/__init__.py +0 -0
  88. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/uninstall/cli.py +0 -0
  89. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/update.py +0 -0
  90. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/commands/view.py +0 -0
  91. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/__init__.py +0 -0
  92. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/agents_compiler.py +0 -0
  93. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/claude_formatter.py +0 -0
  94. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/constants.py +0 -0
  95. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/constitution.py +0 -0
  96. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/constitution_block.py +0 -0
  97. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/context_optimizer.py +0 -0
  98. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/distributed_compiler.py +0 -0
  99. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/gemini_formatter.py +0 -0
  100. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/injector.py +0 -0
  101. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/link_resolver.py +0 -0
  102. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/compilation/template_builder.py +0 -0
  103. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/constants.py +0 -0
  104. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/__init__.py +0 -0
  105. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/auth.py +0 -0
  106. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/azure_cli.py +0 -0
  107. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/command_logger.py +0 -0
  108. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/conflict_detector.py +0 -0
  109. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/docker_args.py +0 -0
  110. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/operations.py +0 -0
  111. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/safe_installer.py +0 -0
  112. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/scope.py +0 -0
  113. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/script_runner.py +0 -0
  114. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/core/token_manager.py +0 -0
  115. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/__init__.py +0 -0
  116. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/aggregator.py +0 -0
  117. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/apm_resolver.py +0 -0
  118. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/artifactory_entry.py +0 -0
  119. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/collection_parser.py +0 -0
  120. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/dependency_graph.py +0 -0
  121. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/github_downloader.py +0 -0
  122. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/installed_package.py +0 -0
  123. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/lockfile.py +0 -0
  124. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/package_validator.py +0 -0
  125. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/plugin_parser.py +0 -0
  126. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/registry_proxy.py +0 -0
  127. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/transport_selection.py +0 -0
  128. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/deps/verifier.py +0 -0
  129. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/drift.py +0 -0
  130. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/factory.py +0 -0
  131. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/__init__.py +0 -0
  132. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/errors.py +0 -0
  133. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/helpers/__init__.py +0 -0
  134. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/helpers/security_scan.py +0 -0
  135. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/insecure_policy.py +0 -0
  136. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/mcp_registry.py +0 -0
  137. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/mcp_warnings.py +0 -0
  138. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/__init__.py +0 -0
  139. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/cleanup.py +0 -0
  140. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/download.py +0 -0
  141. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/finalize.py +0 -0
  142. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/local_content.py +0 -0
  143. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/lockfile.py +0 -0
  144. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/policy_gate.py +0 -0
  145. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/policy_target_check.py +0 -0
  146. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/post_deps_local.py +0 -0
  147. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/phases/resolve.py +0 -0
  148. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/pipeline.py +0 -0
  149. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/presentation/__init__.py +0 -0
  150. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/presentation/dry_run.py +0 -0
  151. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/request.py +0 -0
  152. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/service.py +0 -0
  153. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/install/sources.py +0 -0
  154. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/__init__.py +0 -0
  155. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/agent_integrator.py +0 -0
  156. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/command_integrator.py +0 -0
  157. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/coverage.py +0 -0
  158. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/dispatch.py +0 -0
  159. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/hook_integrator.py +0 -0
  160. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/instruction_integrator.py +0 -0
  161. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/mcp_integrator.py +0 -0
  162. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/prompt_integrator.py +0 -0
  163. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/skill_transformer.py +0 -0
  164. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/integration/utils.py +0 -0
  165. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/marketplace/models.py +0 -0
  166. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/marketplace/registry.py +0 -0
  167. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/marketplace/resolver.py +0 -0
  168. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/marketplace/shadow_detector.py +0 -0
  169. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/marketplace/validator.py +0 -0
  170. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/models/__init__.py +0 -0
  171. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/models/apm_package.py +0 -0
  172. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/models/dependency/__init__.py +0 -0
  173. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/models/dependency/mcp.py +0 -0
  174. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/models/dependency/reference.py +0 -0
  175. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/models/dependency/types.py +0 -0
  176. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/models/plugin.py +0 -0
  177. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/models/results.py +0 -0
  178. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/models/validation.py +0 -0
  179. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/output/__init__.py +0 -0
  180. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/output/formatters.py +0 -0
  181. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/output/models.py +0 -0
  182. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/output/script_formatters.py +0 -0
  183. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/__init__.py +0 -0
  184. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/ci_checks.py +0 -0
  185. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/discovery.py +0 -0
  186. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/inheritance.py +0 -0
  187. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/install_preflight.py +0 -0
  188. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/matcher.py +0 -0
  189. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/models.py +0 -0
  190. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/outcome_routing.py +0 -0
  191. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/parser.py +0 -0
  192. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/policy_checks.py +0 -0
  193. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/project_config.py +0 -0
  194. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/policy/schema.py +0 -0
  195. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/primitives/__init__.py +0 -0
  196. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/primitives/discovery.py +0 -0
  197. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/primitives/models.py +0 -0
  198. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/primitives/parser.py +0 -0
  199. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/registry/__init__.py +0 -0
  200. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/registry/client.py +0 -0
  201. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/registry/integration.py +0 -0
  202. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/registry/operations.py +0 -0
  203. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/runtime/__init__.py +0 -0
  204. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/runtime/base.py +0 -0
  205. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/runtime/codex_runtime.py +0 -0
  206. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/runtime/copilot_runtime.py +0 -0
  207. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/runtime/factory.py +0 -0
  208. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/runtime/llm_runtime.py +0 -0
  209. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/runtime/manager.py +0 -0
  210. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/security/__init__.py +0 -0
  211. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/security/audit_report.py +0 -0
  212. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/security/content_scanner.py +0 -0
  213. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/security/file_scanner.py +0 -0
  214. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/security/gate.py +0 -0
  215. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/update_policy.py +0 -0
  216. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/__init__.py +0 -0
  217. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/console.py +0 -0
  218. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/content_hash.py +0 -0
  219. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/diagnostics.py +0 -0
  220. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/exclude.py +0 -0
  221. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/file_ops.py +0 -0
  222. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/github_host.py +0 -0
  223. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/helpers.py +0 -0
  224. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/path_security.py +0 -0
  225. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/paths.py +0 -0
  226. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/subprocess_env.py +0 -0
  227. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/version_checker.py +0 -0
  228. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/utils/yaml_io.py +0 -0
  229. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/version.py +0 -0
  230. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/workflow/__init__.py +0 -0
  231. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/workflow/discovery.py +0 -0
  232. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/workflow/parser.py +0 -0
  233. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli/workflow/runner.py +0 -0
  234. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli.egg-info/dependency_links.txt +0 -0
  235. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli.egg-info/entry_points.txt +0 -0
  236. {apm_cli-0.9.4 → apm_cli-0.10.0}/src/apm_cli.egg-info/top_level.txt +0 -0
  237. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_apm_package_models.py +0 -0
  238. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_apm_resolver.py +0 -0
  239. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_codex_docker_args_fix.py +0 -0
  240. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_codex_empty_string_and_defaults.py +0 -0
  241. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_collision_integration.py +0 -0
  242. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_console.py +0 -0
  243. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_distributed_compilation.py +0 -0
  244. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_empty_string_and_defaults.py +0 -0
  245. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_enhanced_discovery.py +0 -0
  246. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_github_downloader.py +0 -0
  247. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_github_downloader_token_precedence.py +0 -0
  248. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_lockfile.py +0 -0
  249. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_runnable_prompts.py +0 -0
  250. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_runtime_manager_token_precedence.py +0 -0
  251. {apm_cli-0.9.4 → apm_cli-0.10.0}/tests/test_token_manager.py +0 -0
  252. {apm_cli-0.9.4 → apm_cli-0.10.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.9.4
3
+ Version: 0.10.0
4
4
  Summary: MCP configuration tool
5
5
  Author-email: Daniel Meppiel <user@example.com>
6
6
  License: MIT License
@@ -49,6 +49,7 @@ Requires-Dist: rich>=13.0.0
49
49
  Requires-Dist: rich-click>=1.7.0
50
50
  Requires-Dist: watchdog>=3.0.0
51
51
  Requires-Dist: GitPython>=3.1.0
52
+ Requires-Dist: ruamel.yaml>=0.18.0
52
53
  Provides-Extra: dev
53
54
  Requires-Dist: pytest>=7.0.0; extra == "dev"
54
55
  Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
@@ -106,6 +107,15 @@ git clone <org/repo> && cd <repo>
106
107
  apm install # every agent is configured
107
108
  ```
108
109
 
110
+ **Coming from `npx skills add`?** Drop-in:
111
+
112
+ ```bash
113
+ apm install vercel-labs/agent-skills # whole bundle, like npx skills add
114
+ apm install vercel-labs/agent-skills --skill deploy-to-vercel # one skill, persisted to apm.yml
115
+ ```
116
+
117
+ Same install gesture. You also get a [manifest, lockfile, and reproducibility](https://microsoft.github.io/apm/reference/package-types/#skill-collection-skillsnameskillmd).
118
+
109
119
  ## The three promises
110
120
 
111
121
  ### 1. Portable by manifest
@@ -44,6 +44,15 @@ git clone <org/repo> && cd <repo>
44
44
  apm install # every agent is configured
45
45
  ```
46
46
 
47
+ **Coming from `npx skills add`?** Drop-in:
48
+
49
+ ```bash
50
+ apm install vercel-labs/agent-skills # whole bundle, like npx skills add
51
+ apm install vercel-labs/agent-skills --skill deploy-to-vercel # one skill, persisted to apm.yml
52
+ ```
53
+
54
+ Same install gesture. You also get a [manifest, lockfile, and reproducibility](https://microsoft.github.io/apm/reference/package-types/#skill-collection-skillsnameskillmd).
55
+
47
56
  ## The three promises
48
57
 
49
58
  ### 1. Portable by manifest
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "apm-cli"
7
- version = "0.9.4"
7
+ version = "0.10.0"
8
8
  description = "MCP configuration tool"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -35,6 +35,7 @@ dependencies = [
35
35
  "rich-click>=1.7.0",
36
36
  "watchdog>=3.0.0",
37
37
  "GitPython>=3.1.0",
38
+ "ruamel.yaml>=0.18.0",
38
39
  ]
39
40
 
40
41
  [project.optional-dependencies]
@@ -5,6 +5,7 @@ This module must NOT import from any command module.
5
5
 
6
6
  import builtins
7
7
  import os
8
+ import sys
8
9
  import tempfile
9
10
  from pathlib import Path
10
11
 
@@ -44,6 +45,17 @@ WARNING = f"{Fore.YELLOW}"
44
45
  HIGHLIGHT = f"{Fore.MAGENTA}{Style.BRIGHT}"
45
46
  RESET = Style.RESET_ALL
46
47
 
48
+
49
+ # -------------------------------------------------------------------
50
+ # TTY detection
51
+ # -------------------------------------------------------------------
52
+
53
+
54
+ def _is_interactive():
55
+ """Return True when both stdin and stdout are attached to a TTY."""
56
+ return sys.stdin.isatty() and sys.stdout.isatty()
57
+
58
+
47
59
  # Lazy loading for Rich components to improve startup performance
48
60
  _console = None
49
61
 
@@ -19,6 +19,7 @@ _BOOLEAN_FALSE_VALUES = {"false", "0", "no"}
19
19
  _CONFIG_KEY_DISPLAY_NAMES = {
20
20
  "auto_integrate": "auto-integrate",
21
21
  "temp_dir": "temp-dir",
22
+ "copilot_cowork_skills_dir": "copilot-cowork-skills-dir",
22
23
  }
23
24
 
24
25
 
@@ -52,7 +53,7 @@ def _get_config_getters():
52
53
 
53
54
  def _valid_config_keys() -> str:
54
55
  """Return valid config keys for messages."""
55
- return ", ".join(["auto-integrate", "temp-dir"])
56
+ return ", ".join(["auto-integrate", "temp-dir", "copilot-cowork-skills-dir"])
56
57
 
57
58
 
58
59
  @click.group(help="Configure APM CLI", invoke_without_command=True)
@@ -130,6 +131,18 @@ def config(ctx):
130
131
  if _temp_dir_val:
131
132
  config_table.add_row("", "Temp Directory", _temp_dir_val)
132
133
 
134
+ from ..core.experimental import is_enabled as _is_enabled
135
+
136
+ if _is_enabled("copilot_cowork"):
137
+ from ..config import get_copilot_cowork_skills_dir as _get_csd
138
+
139
+ _csd_val = _get_csd()
140
+ config_table.add_row(
141
+ "",
142
+ "Cowork Skills Dir",
143
+ _csd_val if _csd_val else "Not set (using auto-detection)",
144
+ )
145
+
133
146
  console.print(config_table)
134
147
 
135
148
  except (ImportError, NameError):
@@ -157,6 +170,17 @@ def config(ctx):
157
170
  if _temp_dir_fb:
158
171
  click.echo(f" Temp Directory: {_temp_dir_fb}")
159
172
 
173
+ from ..core.experimental import is_enabled as _is_enabled_fb
174
+
175
+ if _is_enabled_fb("copilot_cowork"):
176
+ from ..config import get_copilot_cowork_skills_dir as _get_csd_fb
177
+
178
+ _csd_fb = _get_csd_fb()
179
+ click.echo(
180
+ f" Cowork Skills Dir: "
181
+ f"{_csd_fb if _csd_fb else 'Not set (using auto-detection)'}"
182
+ )
183
+
160
184
 
161
185
  @config.command(help="Set a configuration value")
162
186
  @click.argument("key")
@@ -171,6 +195,27 @@ def set(key, value):
171
195
  from ..config import get_temp_dir, set_temp_dir
172
196
 
173
197
  logger = CommandLogger("config set")
198
+ if key == "copilot-cowork-skills-dir":
199
+ from ..core.experimental import is_enabled
200
+
201
+ if not is_enabled("copilot_cowork"):
202
+ logger.error(
203
+ "copilot-cowork-skills-dir requires the copilot-cowork experimental flag. "
204
+ "Run: apm experimental enable copilot-cowork"
205
+ )
206
+ sys.exit(1)
207
+ from ..config import get_copilot_cowork_skills_dir, set_copilot_cowork_skills_dir
208
+
209
+ try:
210
+ set_copilot_cowork_skills_dir(value)
211
+ logger.success(
212
+ f"Cowork skills directory set to: {get_copilot_cowork_skills_dir()}"
213
+ )
214
+ except ValueError as exc:
215
+ logger.error(str(exc))
216
+ sys.exit(1)
217
+ return
218
+
174
219
  if key == "temp-dir":
175
220
  try:
176
221
  set_temp_dir(value)
@@ -218,6 +263,18 @@ def get(key):
218
263
  logger = CommandLogger("config get")
219
264
  getters = _get_config_getters()
220
265
  if key:
266
+ if key == "copilot-cowork-skills-dir":
267
+ from ..config import get_copilot_cowork_skills_dir
268
+
269
+ value = get_copilot_cowork_skills_dir()
270
+ if value is None:
271
+ click.echo(
272
+ "copilot-cowork-skills-dir: Not set (using auto-detection)"
273
+ )
274
+ else:
275
+ click.echo(f"copilot-cowork-skills-dir: {value}")
276
+ return
277
+
221
278
  if key == "temp-dir":
222
279
  value = get_temp_dir()
223
280
  if value is None:
@@ -244,3 +301,44 @@ def get(key):
244
301
  click.echo(f" auto-integrate: {get_auto_integrate()}")
245
302
  temp_dir = get_temp_dir()
246
303
  click.echo(f" temp-dir: {temp_dir if temp_dir is not None else 'Not set (using system default)'}")
304
+
305
+ from ..core.experimental import is_enabled as _is_enabled_get
306
+
307
+ if _is_enabled_get("copilot_cowork"):
308
+ from ..config import get_copilot_cowork_skills_dir as _get_csd_get
309
+
310
+ csd = _get_csd_get()
311
+ click.echo(
312
+ f" copilot-cowork-skills-dir: "
313
+ f"{csd if csd is not None else 'Not set (using auto-detection)'}"
314
+ )
315
+
316
+
317
+ @config.command(help="Unset a configuration value")
318
+ @click.argument("key")
319
+ def unset(key):
320
+ """Unset (remove) a configuration value.
321
+
322
+ Examples:
323
+ apm config unset temp-dir
324
+ apm config unset copilot-cowork-skills-dir
325
+ """
326
+ logger = CommandLogger("config unset")
327
+
328
+ if key == "temp-dir":
329
+ from ..config import unset_temp_dir
330
+
331
+ unset_temp_dir()
332
+ logger.success("Temporary directory configuration removed")
333
+ return
334
+
335
+ if key == "copilot-cowork-skills-dir":
336
+ from ..config import unset_copilot_cowork_skills_dir
337
+
338
+ unset_copilot_cowork_skills_dir()
339
+ logger.success("Cowork skills directory configuration removed")
340
+ return
341
+
342
+ logger.error(f"Unknown configuration key: '{key}'")
343
+ logger.progress(f"Valid keys: {_valid_config_keys()}")
344
+ sys.exit(1)