apm-cli 0.8.6__tar.gz → 0.8.8__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 (186) hide show
  1. {apm_cli-0.8.6/src/apm_cli.egg-info → apm_cli-0.8.8}/PKG-INFO +2 -2
  2. {apm_cli-0.8.6 → apm_cli-0.8.8}/README.md +1 -1
  3. {apm_cli-0.8.6 → apm_cli-0.8.8}/pyproject.toml +1 -1
  4. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/bundle/lockfile_enrichment.py +6 -1
  5. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/cli.py +3 -0
  6. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/_helpers.py +4 -2
  7. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/compile/cli.py +1 -1
  8. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/deps/__init__.py +0 -4
  9. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/deps/_utils.py +2 -106
  10. apm_cli-0.8.8/src/apm_cli/commands/deps/cli.py +783 -0
  11. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/install.py +553 -281
  12. apm_cli-0.8.8/src/apm_cli/commands/marketplace.py +436 -0
  13. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/pack.py +1 -1
  14. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/uninstall/cli.py +41 -17
  15. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/uninstall/engine.py +76 -77
  16. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/command_logger.py +1 -0
  17. apm_cli-0.8.8/src/apm_cli/core/scope.py +179 -0
  18. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/target_detection.py +31 -8
  19. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/github_downloader.py +68 -19
  20. apm_cli-0.8.8/src/apm_cli/deps/installed_package.py +54 -0
  21. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/lockfile.py +60 -12
  22. apm_cli-0.8.8/src/apm_cli/deps/registry_proxy.py +231 -0
  23. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/drift.py +26 -3
  24. apm_cli-0.8.8/src/apm_cli/integration/agent_integrator.py +434 -0
  25. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/base_integrator.py +88 -40
  26. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/command_integrator.py +115 -114
  27. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/hook_integrator.py +137 -0
  28. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/instruction_integrator.py +115 -102
  29. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/prompt_integrator.py +60 -1
  30. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/skill_integrator.py +47 -21
  31. apm_cli-0.8.8/src/apm_cli/integration/targets.py +364 -0
  32. apm_cli-0.8.8/src/apm_cli/marketplace/__init__.py +28 -0
  33. apm_cli-0.8.8/src/apm_cli/marketplace/client.py +302 -0
  34. apm_cli-0.8.8/src/apm_cli/marketplace/errors.py +44 -0
  35. apm_cli-0.8.8/src/apm_cli/marketplace/models.py +219 -0
  36. apm_cli-0.8.8/src/apm_cli/marketplace/registry.py +130 -0
  37. apm_cli-0.8.8/src/apm_cli/marketplace/resolver.py +229 -0
  38. {apm_cli-0.8.6 → apm_cli-0.8.8/src/apm_cli.egg-info}/PKG-INFO +2 -2
  39. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli.egg-info/SOURCES.txt +10 -0
  40. apm_cli-0.8.6/src/apm_cli/commands/deps/cli.py +0 -608
  41. apm_cli-0.8.6/src/apm_cli/integration/agent_integrator.py +0 -487
  42. apm_cli-0.8.6/src/apm_cli/integration/targets.py +0 -207
  43. {apm_cli-0.8.6 → apm_cli-0.8.8}/AUTHORS +0 -0
  44. {apm_cli-0.8.6 → apm_cli-0.8.8}/LICENSE +0 -0
  45. {apm_cli-0.8.6 → apm_cli-0.8.8}/setup.cfg +0 -0
  46. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/__init__.py +0 -0
  47. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/__init__.py +0 -0
  48. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/__init__.py +0 -0
  49. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/base.py +0 -0
  50. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/codex.py +0 -0
  51. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/copilot.py +0 -0
  52. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/cursor.py +0 -0
  53. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/opencode.py +0 -0
  54. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/vscode.py +0 -0
  55. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
  56. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/package_manager/base.py +0 -0
  57. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
  58. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/bundle/__init__.py +0 -0
  59. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/bundle/packer.py +0 -0
  60. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/bundle/plugin_exporter.py +0 -0
  61. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/bundle/unpacker.py +0 -0
  62. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/__init__.py +0 -0
  63. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/audit.py +0 -0
  64. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/compile/__init__.py +0 -0
  65. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/compile/watcher.py +0 -0
  66. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/config.py +0 -0
  67. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/init.py +0 -0
  68. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/list_cmd.py +0 -0
  69. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/mcp.py +0 -0
  70. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/prune.py +0 -0
  71. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/run.py +0 -0
  72. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/runtime.py +0 -0
  73. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/uninstall/__init__.py +0 -0
  74. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/update.py +0 -0
  75. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/__init__.py +0 -0
  76. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/agents_compiler.py +0 -0
  77. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/claude_formatter.py +0 -0
  78. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/constants.py +0 -0
  79. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/constitution.py +0 -0
  80. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/constitution_block.py +0 -0
  81. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/context_optimizer.py +0 -0
  82. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/distributed_compiler.py +0 -0
  83. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/injector.py +0 -0
  84. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/link_resolver.py +0 -0
  85. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/template_builder.py +0 -0
  86. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/config.py +0 -0
  87. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/constants.py +0 -0
  88. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/__init__.py +0 -0
  89. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/auth.py +0 -0
  90. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/conflict_detector.py +0 -0
  91. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/docker_args.py +0 -0
  92. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/operations.py +0 -0
  93. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/safe_installer.py +0 -0
  94. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/script_runner.py +0 -0
  95. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/token_manager.py +0 -0
  96. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/__init__.py +0 -0
  97. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/aggregator.py +0 -0
  98. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/apm_resolver.py +0 -0
  99. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/collection_parser.py +0 -0
  100. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/dependency_graph.py +0 -0
  101. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/package_validator.py +0 -0
  102. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/plugin_parser.py +0 -0
  103. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/verifier.py +0 -0
  104. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/factory.py +0 -0
  105. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/__init__.py +0 -0
  106. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/mcp_integrator.py +0 -0
  107. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/skill_transformer.py +0 -0
  108. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/utils.py +0 -0
  109. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/__init__.py +0 -0
  110. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/apm_package.py +0 -0
  111. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/dependency/__init__.py +0 -0
  112. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/dependency/mcp.py +0 -0
  113. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/dependency/reference.py +0 -0
  114. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/dependency/types.py +0 -0
  115. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/plugin.py +0 -0
  116. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/results.py +0 -0
  117. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/validation.py +0 -0
  118. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/output/__init__.py +0 -0
  119. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/output/formatters.py +0 -0
  120. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/output/models.py +0 -0
  121. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/output/script_formatters.py +0 -0
  122. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/__init__.py +0 -0
  123. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/ci_checks.py +0 -0
  124. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/discovery.py +0 -0
  125. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/inheritance.py +0 -0
  126. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/matcher.py +0 -0
  127. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/models.py +0 -0
  128. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/parser.py +0 -0
  129. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/policy_checks.py +0 -0
  130. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/schema.py +0 -0
  131. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/primitives/__init__.py +0 -0
  132. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/primitives/discovery.py +0 -0
  133. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/primitives/models.py +0 -0
  134. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/primitives/parser.py +0 -0
  135. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/registry/__init__.py +0 -0
  136. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/registry/client.py +0 -0
  137. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/registry/integration.py +0 -0
  138. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/registry/operations.py +0 -0
  139. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/__init__.py +0 -0
  140. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/base.py +0 -0
  141. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/codex_runtime.py +0 -0
  142. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/copilot_runtime.py +0 -0
  143. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/factory.py +0 -0
  144. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/llm_runtime.py +0 -0
  145. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/manager.py +0 -0
  146. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/security/__init__.py +0 -0
  147. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/security/audit_report.py +0 -0
  148. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/security/content_scanner.py +0 -0
  149. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/security/file_scanner.py +0 -0
  150. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/security/gate.py +0 -0
  151. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/__init__.py +0 -0
  152. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/console.py +0 -0
  153. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/content_hash.py +0 -0
  154. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/diagnostics.py +0 -0
  155. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/file_ops.py +0 -0
  156. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/github_host.py +0 -0
  157. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/helpers.py +0 -0
  158. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/path_security.py +0 -0
  159. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/paths.py +0 -0
  160. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/version_checker.py +0 -0
  161. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/yaml_io.py +0 -0
  162. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/version.py +0 -0
  163. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/workflow/__init__.py +0 -0
  164. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/workflow/discovery.py +0 -0
  165. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/workflow/parser.py +0 -0
  166. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/workflow/runner.py +0 -0
  167. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli.egg-info/dependency_links.txt +0 -0
  168. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli.egg-info/entry_points.txt +0 -0
  169. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli.egg-info/requires.txt +0 -0
  170. {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli.egg-info/top_level.txt +0 -0
  171. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_apm_package_models.py +0 -0
  172. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_apm_resolver.py +0 -0
  173. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_codex_docker_args_fix.py +0 -0
  174. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_codex_empty_string_and_defaults.py +0 -0
  175. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_collision_integration.py +0 -0
  176. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_console.py +0 -0
  177. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_distributed_compilation.py +0 -0
  178. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_empty_string_and_defaults.py +0 -0
  179. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_enhanced_discovery.py +0 -0
  180. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_github_downloader.py +0 -0
  181. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_github_downloader_token_precedence.py +0 -0
  182. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_lockfile.py +0 -0
  183. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_runnable_prompts.py +0 -0
  184. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_runtime_manager_token_precedence.py +0 -0
  185. {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_token_manager.py +0 -0
  186. {apm_cli-0.8.6 → apm_cli-0.8.8}/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.8.6
3
+ Version: 0.8.8
4
4
  Summary: MCP configuration tool
5
5
  Author-email: Daniel Meppiel <user@example.com>
6
6
  License: MIT License
@@ -66,7 +66,7 @@ Dynamic: license-file
66
66
 
67
67
  Think `package.json`, `requirements.txt`, or `Cargo.toml` — but for AI agent configuration.
68
68
 
69
- GitHub Copilot · Claude Code · Cursor · OpenCode
69
+ GitHub Copilot · Claude Code · Cursor · OpenCode · Codex
70
70
 
71
71
  **[Documentation](https://microsoft.github.io/apm/)** · **[Quick Start](https://microsoft.github.io/apm/getting-started/quick-start/)** · **[CLI Reference](https://microsoft.github.io/apm/reference/cli-commands/)**
72
72
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  Think `package.json`, `requirements.txt`, or `Cargo.toml` — but for AI agent configuration.
6
6
 
7
- GitHub Copilot · Claude Code · Cursor · OpenCode
7
+ GitHub Copilot · Claude Code · Cursor · OpenCode · Codex
8
8
 
9
9
  **[Documentation](https://microsoft.github.io/apm/)** · **[Quick Start](https://microsoft.github.io/apm/getting-started/quick-start/)** · **[CLI Reference](https://microsoft.github.io/apm/reference/cli-commands/)**
10
10
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "apm-cli"
7
- version = "0.8.6"
7
+ version = "0.8.8"
8
8
  description = "MCP configuration tool"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -13,7 +13,8 @@ _TARGET_PREFIXES = {
13
13
  "claude": [".claude/"],
14
14
  "cursor": [".cursor/"],
15
15
  "opencode": [".opencode/"],
16
- "all": [".github/", ".claude/", ".cursor/", ".opencode/"],
16
+ "codex": [".codex/", ".agents/"],
17
+ "all": [".github/", ".claude/", ".cursor/", ".opencode/", ".codex/", ".agents/"],
17
18
  }
18
19
 
19
20
  # Cross-target path equivalences for skills/ and agents/ directories.
@@ -46,6 +47,10 @@ _CROSS_TARGET_MAPS: Dict[str, Dict[str, str]] = {
46
47
  ".github/skills/": ".opencode/skills/",
47
48
  ".github/agents/": ".opencode/agents/",
48
49
  },
50
+ "codex": {
51
+ ".github/skills/": ".agents/skills/",
52
+ ".github/agents/": ".codex/agents/",
53
+ },
49
54
  }
50
55
 
51
56
 
@@ -22,6 +22,7 @@ from apm_cli.commands.deps import deps
22
22
  from apm_cli.commands.init import init
23
23
  from apm_cli.commands.install import install
24
24
  from apm_cli.commands.list_cmd import list as list_cmd
25
+ from apm_cli.commands.marketplace import marketplace, search as marketplace_search
25
26
  from apm_cli.commands.mcp import mcp
26
27
  from apm_cli.commands.pack import pack_cmd, unpack_cmd
27
28
  from apm_cli.commands.prune import prune
@@ -69,6 +70,8 @@ cli.add_command(list_cmd, name="list")
69
70
  cli.add_command(config)
70
71
  cli.add_command(runtime)
71
72
  cli.add_command(mcp)
73
+ cli.add_command(marketplace)
74
+ cli.add_command(marketplace_search, name="search")
72
75
 
73
76
 
74
77
  def _configure_encoding() -> None:
@@ -432,12 +432,13 @@ def _create_plugin_json(config):
432
432
  f.write(json.dumps(plugin_data, indent=2) + "\n")
433
433
 
434
434
 
435
- def _create_minimal_apm_yml(config, plugin=False):
435
+ def _create_minimal_apm_yml(config, plugin=False, target_path=None):
436
436
  """Create minimal apm.yml file with auto-detected metadata.
437
437
 
438
438
  Args:
439
439
  config: dict with name, version, description, author keys.
440
440
  plugin: if True, include a devDependencies section.
441
+ target_path: explicit file path to write (defaults to cwd/apm.yml).
441
442
  """
442
443
  # Create minimal apm.yml structure
443
444
  apm_yml_data = {
@@ -455,4 +456,5 @@ def _create_minimal_apm_yml(config, plugin=False):
455
456
 
456
457
  # Write apm.yml
457
458
  from ..utils.yaml_io import dump_yaml
458
- dump_yaml(apm_yml_data, APM_YML_FILENAME)
459
+ out_path = target_path or APM_YML_FILENAME
460
+ dump_yaml(apm_yml_data, out_path)
@@ -172,7 +172,7 @@ def _get_validation_suggestion(error_msg):
172
172
  @click.option(
173
173
  "--target",
174
174
  "-t",
175
- type=click.Choice(["copilot", "vscode", "agents", "claude", "cursor", "opencode", "all"]),
175
+ type=click.Choice(["copilot", "vscode", "agents", "claude", "cursor", "opencode", "codex", "all"]),
176
176
  default=None,
177
177
  help="Target platform: copilot (AGENTS.md), claude (CLAUDE.md), cursor, opencode, or all. 'vscode' and 'agents' are deprecated aliases for 'copilot'. Auto-detects if not specified.",
178
178
  )
@@ -9,8 +9,6 @@ from ._utils import (
9
9
  _get_detailed_context_counts,
10
10
  _get_package_display_info,
11
11
  _get_detailed_package_info,
12
- _update_single_package,
13
- _update_all_packages,
14
12
  )
15
13
 
16
14
  __all__ = [
@@ -29,6 +27,4 @@ __all__ = [
29
27
  "_get_detailed_context_counts",
30
28
  "_get_package_display_info",
31
29
  "_get_detailed_package_info",
32
- "_update_single_package",
33
- "_update_all_packages",
34
30
  ]
@@ -1,11 +1,10 @@
1
1
  """Utility helpers for APM dependency commands."""
2
2
 
3
3
  from pathlib import Path
4
- from typing import Any, Dict, List, Optional
4
+ from typing import Any, Dict
5
5
 
6
- from ...constants import APM_DIR, APM_MODULES_DIR, APM_YML_FILENAME, SKILL_MD_FILENAME
6
+ from ...constants import APM_DIR, APM_YML_FILENAME, SKILL_MD_FILENAME
7
7
  from ...models.apm_package import APMPackage
8
- from ...deps.github_downloader import GitHubPackageDownloader
9
8
 
10
9
 
11
10
  def _scan_installed_packages(apm_modules_dir: Path) -> list:
@@ -221,106 +220,3 @@ def _get_detailed_package_info(package_path: Path) -> Dict[str, Any]:
221
220
  'workflows': 0,
222
221
  'hooks': 0
223
222
  }
224
-
225
-
226
- def _update_single_package(package_name: str, project_deps: List, apm_modules_path: Path, logger=None):
227
- """Update a specific package."""
228
- if logger is None:
229
- from ...core.command_logger import CommandLogger
230
- logger = CommandLogger("deps-update")
231
-
232
- # Find the dependency reference for this package
233
- target_dep = None
234
- for dep in project_deps:
235
- if dep.get_display_name() == package_name or dep.repo_url.split('/')[-1] == package_name:
236
- target_dep = dep
237
- break
238
-
239
- if not target_dep:
240
- logger.error(f"Package '{package_name}' not found in apm.yml dependencies")
241
- return
242
-
243
- # Find the installed package directory using namespaced structure
244
- # GitHub: owner/repo (2 parts)
245
- # Azure DevOps: org/project/repo (3 parts)
246
- package_dir = None
247
- if target_dep.alias:
248
- package_dir = apm_modules_path / target_dep.alias
249
- else:
250
- # Parse path from repo_url
251
- repo_parts = target_dep.repo_url.split('/')
252
- if target_dep.is_azure_devops() and len(repo_parts) >= 3:
253
- # ADO structure: apm_modules/org/project/repo
254
- package_dir = apm_modules_path / repo_parts[0] / repo_parts[1] / repo_parts[2]
255
- elif len(repo_parts) >= 2:
256
- package_dir = apm_modules_path / repo_parts[0] / repo_parts[1]
257
- else:
258
- # Fallback to simple name matching
259
- package_dir = apm_modules_path / package_name
260
-
261
- if not package_dir.exists():
262
- logger.error(f"Package '{package_name}' not installed in apm_modules/")
263
- logger.progress(f"Run 'apm install' to install it first")
264
- return
265
-
266
- try:
267
- downloader = GitHubPackageDownloader()
268
- logger.progress(f"Updating {target_dep.repo_url}...")
269
-
270
- # Download latest version
271
- package_info = downloader.download_package(target_dep, package_dir)
272
-
273
- logger.success(f"Updated {target_dep.repo_url}")
274
-
275
- except Exception as e:
276
- logger.error(f"Failed to update {package_name}: {e}")
277
-
278
-
279
- def _update_all_packages(project_deps: List, apm_modules_path: Path, logger=None):
280
- """Update all packages."""
281
- if logger is None:
282
- from ...core.command_logger import CommandLogger
283
- logger = CommandLogger("deps-update")
284
-
285
- if not project_deps:
286
- logger.progress("No APM dependencies to update")
287
- return
288
-
289
- logger.start(f"Updating {len(project_deps)} APM dependencies...")
290
-
291
- downloader = GitHubPackageDownloader()
292
- updated_count = 0
293
-
294
- for dep in project_deps:
295
- # Determine package directory using namespaced structure
296
- # GitHub: apm_modules/owner/repo (2 parts)
297
- # Azure DevOps: apm_modules/org/project/repo (3 parts)
298
- if dep.alias:
299
- package_dir = apm_modules_path / dep.alias
300
- else:
301
- # Parse path from repo_url
302
- repo_parts = dep.repo_url.split('/')
303
- if dep.is_azure_devops() and len(repo_parts) >= 3:
304
- # ADO structure
305
- package_dir = apm_modules_path / repo_parts[0] / repo_parts[1] / repo_parts[2]
306
- elif len(repo_parts) >= 2:
307
- package_dir = apm_modules_path / repo_parts[0] / repo_parts[1]
308
- else:
309
- # Fallback to simple repo name (shouldn't happen)
310
- package_dir = apm_modules_path / dep.repo_url
311
-
312
- if not package_dir.exists():
313
- logger.warning(f"{dep.repo_url} not installed - skipping")
314
- continue
315
-
316
- try:
317
- logger.verbose_detail(f" Updating {dep.repo_url}...")
318
- package_info = downloader.download_package(dep, package_dir)
319
- updated_count += 1
320
- logger.success(f" {dep.repo_url}")
321
-
322
- except Exception as e:
323
- logger.error(f" Failed to update {dep.repo_url}: {e}")
324
- continue
325
-
326
- logger.success(f"Updated {updated_count} of {len(project_deps)} packages")