apm-cli 0.8.2__tar.gz → 0.8.3__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 (161) hide show
  1. {apm_cli-0.8.2/src/apm_cli.egg-info → apm_cli-0.8.3}/PKG-INFO +11 -11
  2. {apm_cli-0.8.2 → apm_cli-0.8.3}/README.md +10 -10
  3. {apm_cli-0.8.2 → apm_cli-0.8.3}/pyproject.toml +1 -1
  4. apm_cli-0.8.3/src/apm_cli/bundle/__init__.py +13 -0
  5. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/bundle/packer.py +16 -0
  6. apm_cli-0.8.3/src/apm_cli/bundle/plugin_exporter.py +643 -0
  7. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/_helpers.py +59 -12
  8. apm_cli-0.8.3/src/apm_cli/commands/compile/__init__.py +11 -0
  9. apm_cli-0.8.2/src/apm_cli/commands/compile.py → apm_cli-0.8.3/src/apm_cli/commands/compile/cli.py +107 -290
  10. apm_cli-0.8.3/src/apm_cli/commands/compile/watcher.py +171 -0
  11. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/config.py +3 -2
  12. apm_cli-0.8.3/src/apm_cli/commands/deps/__init__.py +34 -0
  13. apm_cli-0.8.3/src/apm_cli/commands/deps/_utils.py +296 -0
  14. apm_cli-0.8.2/src/apm_cli/commands/deps.py → apm_cli-0.8.3/src/apm_cli/commands/deps/cli.py +64 -348
  15. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/init.py +45 -11
  16. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/install.py +266 -672
  17. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/pack.py +9 -1
  18. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/prune.py +22 -17
  19. apm_cli-0.8.3/src/apm_cli/commands/uninstall/__init__.py +23 -0
  20. apm_cli-0.8.3/src/apm_cli/commands/uninstall/cli.py +187 -0
  21. apm_cli-0.8.3/src/apm_cli/commands/uninstall/engine.py +383 -0
  22. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/update.py +3 -4
  23. apm_cli-0.8.3/src/apm_cli/constants.py +31 -0
  24. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/deps/apm_resolver.py +20 -6
  25. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/deps/dependency_graph.py +1 -0
  26. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/deps/github_downloader.py +32 -18
  27. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/deps/lockfile.py +20 -2
  28. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/deps/plugin_parser.py +44 -0
  29. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/drift.py +12 -15
  30. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/mcp_integrator.py +18 -3
  31. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/models/__init__.py +6 -0
  32. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/models/apm_package.py +49 -0
  33. apm_cli-0.8.3/src/apm_cli/models/dependency/__init__.py +14 -0
  34. apm_cli-0.8.3/src/apm_cli/models/dependency/mcp.py +136 -0
  35. apm_cli-0.8.3/src/apm_cli/models/dependency/reference.py +958 -0
  36. apm_cli-0.8.3/src/apm_cli/models/dependency/types.py +63 -0
  37. apm_cli-0.8.3/src/apm_cli/models/results.py +25 -0
  38. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/models/validation.py +57 -42
  39. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/security/content_scanner.py +3 -1
  40. apm_cli-0.8.3/src/apm_cli/utils/content_hash.py +72 -0
  41. {apm_cli-0.8.2 → apm_cli-0.8.3/src/apm_cli.egg-info}/PKG-INFO +11 -11
  42. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli.egg-info/SOURCES.txt +17 -4
  43. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_apm_package_models.py +174 -3
  44. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_github_downloader.py +1 -1
  45. apm_cli-0.8.2/src/apm_cli/bundle/__init__.py +0 -6
  46. apm_cli-0.8.2/src/apm_cli/commands/uninstall.py +0 -591
  47. apm_cli-0.8.2/src/apm_cli/models/dependency.py +0 -1189
  48. {apm_cli-0.8.2 → apm_cli-0.8.3}/AUTHORS +0 -0
  49. {apm_cli-0.8.2 → apm_cli-0.8.3}/LICENSE +0 -0
  50. {apm_cli-0.8.2 → apm_cli-0.8.3}/setup.cfg +0 -0
  51. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/__init__.py +0 -0
  52. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/__init__.py +0 -0
  53. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/client/__init__.py +0 -0
  54. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/client/base.py +0 -0
  55. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/client/codex.py +0 -0
  56. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/client/copilot.py +0 -0
  57. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/client/cursor.py +0 -0
  58. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/client/opencode.py +0 -0
  59. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/client/vscode.py +0 -0
  60. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
  61. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/package_manager/base.py +0 -0
  62. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
  63. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/bundle/lockfile_enrichment.py +0 -0
  64. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/bundle/unpacker.py +0 -0
  65. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/cli.py +0 -0
  66. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/__init__.py +0 -0
  67. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/audit.py +0 -0
  68. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/list_cmd.py +0 -0
  69. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/mcp.py +0 -0
  70. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/run.py +0 -0
  71. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/commands/runtime.py +0 -0
  72. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/__init__.py +0 -0
  73. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/agents_compiler.py +0 -0
  74. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/claude_formatter.py +0 -0
  75. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/constants.py +0 -0
  76. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/constitution.py +0 -0
  77. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/constitution_block.py +0 -0
  78. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/context_optimizer.py +0 -0
  79. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/distributed_compiler.py +0 -0
  80. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/injector.py +0 -0
  81. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/link_resolver.py +0 -0
  82. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/compilation/template_builder.py +0 -0
  83. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/config.py +0 -0
  84. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/core/__init__.py +0 -0
  85. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/core/conflict_detector.py +0 -0
  86. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/core/docker_args.py +0 -0
  87. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/core/operations.py +0 -0
  88. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/core/safe_installer.py +0 -0
  89. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/core/script_runner.py +0 -0
  90. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/core/target_detection.py +0 -0
  91. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/core/token_manager.py +0 -0
  92. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/deps/__init__.py +0 -0
  93. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/deps/aggregator.py +0 -0
  94. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/deps/collection_parser.py +0 -0
  95. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/deps/package_validator.py +0 -0
  96. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/deps/verifier.py +0 -0
  97. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/factory.py +0 -0
  98. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/__init__.py +0 -0
  99. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/agent_integrator.py +0 -0
  100. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/base_integrator.py +0 -0
  101. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/command_integrator.py +0 -0
  102. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/hook_integrator.py +0 -0
  103. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/instruction_integrator.py +0 -0
  104. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/prompt_integrator.py +0 -0
  105. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/skill_integrator.py +0 -0
  106. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/skill_transformer.py +0 -0
  107. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/targets.py +0 -0
  108. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/integration/utils.py +0 -0
  109. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/models/plugin.py +0 -0
  110. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/output/__init__.py +0 -0
  111. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/output/formatters.py +0 -0
  112. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/output/models.py +0 -0
  113. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/output/script_formatters.py +0 -0
  114. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/primitives/__init__.py +0 -0
  115. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/primitives/discovery.py +0 -0
  116. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/primitives/models.py +0 -0
  117. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/primitives/parser.py +0 -0
  118. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/registry/__init__.py +0 -0
  119. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/registry/client.py +0 -0
  120. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/registry/integration.py +0 -0
  121. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/registry/operations.py +0 -0
  122. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/runtime/__init__.py +0 -0
  123. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/runtime/base.py +0 -0
  124. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/runtime/codex_runtime.py +0 -0
  125. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/runtime/copilot_runtime.py +0 -0
  126. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/runtime/factory.py +0 -0
  127. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/runtime/llm_runtime.py +0 -0
  128. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/runtime/manager.py +0 -0
  129. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/security/__init__.py +0 -0
  130. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/security/audit_report.py +0 -0
  131. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/security/gate.py +0 -0
  132. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/utils/__init__.py +0 -0
  133. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/utils/console.py +0 -0
  134. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/utils/diagnostics.py +0 -0
  135. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/utils/github_host.py +0 -0
  136. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/utils/helpers.py +0 -0
  137. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/utils/path_security.py +0 -0
  138. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/utils/version_checker.py +0 -0
  139. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/version.py +0 -0
  140. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/workflow/__init__.py +0 -0
  141. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/workflow/discovery.py +0 -0
  142. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/workflow/parser.py +0 -0
  143. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli/workflow/runner.py +0 -0
  144. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli.egg-info/dependency_links.txt +0 -0
  145. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli.egg-info/entry_points.txt +0 -0
  146. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli.egg-info/requires.txt +0 -0
  147. {apm_cli-0.8.2 → apm_cli-0.8.3}/src/apm_cli.egg-info/top_level.txt +0 -0
  148. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_apm_resolver.py +0 -0
  149. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_codex_docker_args_fix.py +0 -0
  150. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_codex_empty_string_and_defaults.py +0 -0
  151. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_collision_integration.py +0 -0
  152. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_console.py +0 -0
  153. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_distributed_compilation.py +0 -0
  154. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_empty_string_and_defaults.py +0 -0
  155. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_enhanced_discovery.py +0 -0
  156. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_github_downloader_token_precedence.py +0 -0
  157. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_lockfile.py +0 -0
  158. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_runnable_prompts.py +0 -0
  159. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_runtime_manager_token_precedence.py +0 -0
  160. {apm_cli-0.8.2 → apm_cli-0.8.3}/tests/test_token_manager.py +0 -0
  161. {apm_cli-0.8.2 → apm_cli-0.8.3}/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.2
3
+ Version: 0.8.3
4
4
  Summary: MCP configuration tool
5
5
  Author-email: Daniel Meppiel <user@example.com>
6
6
  License: MIT License
@@ -73,7 +73,7 @@ GitHub Copilot · Claude Code · Cursor · OpenCode
73
73
 
74
74
  AI coding agents need context to be useful — standards, prompts, skills, plugins — but today every developer sets this up manually. Nothing is portable nor reproducible. There's no manifest for it.
75
75
 
76
- **APM fixes this.** Declare your project's agentic dependencies once in `apm.yml`, and every developer who clones your repo gets a fully configured agent setup in seconds — with transitive dependency resolution, just like npm or pip.
76
+ **APM fixes this.** Declare your project's agentic dependencies once in `apm.yml`, and every developer who clones your repo gets a fully configured agent setup in seconds — with transitive dependency resolution, just like npm or pip. It's also the first tool that lets you **author plugins** with a real dependency manager and export standard `plugin.json` packages.
77
77
 
78
78
  ```yaml
79
79
  # apm.yml — ships with your project
@@ -98,26 +98,26 @@ apm install # every agent is configured
98
98
 
99
99
  ## Highlights
100
100
 
101
- - **One manifest for everything** — instructions, skills, prompts, agents, hooks, plugins, MCP servers
102
- - **Install from anywhere** — GitHub, GitLab, Bitbucket, Azure DevOps, GitHub Enterprise, any git host
103
- - **Transitive dependencies** — packages can depend on packages; APM resolves the full tree
104
- - **Compile to standards** — `apm compile` produces `AGENTS.md` (GitHub Copilot, OpenCode), `CLAUDE.md` (Claude Code), and `.cursor/rules/` (Cursor)
105
- - **Content security** — `apm audit` scans for hidden Unicode characters; `apm install` blocks compromised packages before agents can read them
106
- - **Create & share** — `apm pack` bundles your current configuration as a zipped package
107
- - **CI/CD ready** — [GitHub Action](https://github.com/microsoft/apm-action) for automated workflows
101
+ - **[One manifest for everything](https://microsoft.github.io/apm/reference/primitive-types/)** — instructions, skills, prompts, agents, hooks, plugins, MCP servers
102
+ - **[Install from anywhere](https://microsoft.github.io/apm/guides/dependencies/)** — GitHub, GitLab, Bitbucket, Azure DevOps, GitHub Enterprise, any git host
103
+ - **[Transitive dependencies](https://microsoft.github.io/apm/guides/dependencies/)** — packages can depend on packages; APM resolves the full tree
104
+ - **[Content security](https://microsoft.github.io/apm/enterprise/security/)** — `apm audit` scans for hidden Unicode; `apm install` blocks compromised packages before agents read them
105
+ - **[Author plugins](https://microsoft.github.io/apm/guides/plugins/)** — build Copilot, Claude, and Cursor plugins with dependency management and security scanning, then export standard `plugin.json`
106
+ - **[Pack & distribute](https://microsoft.github.io/apm/guides/pack-distribute/)** — `apm pack` bundles your configuration as a zipped package or a standalone plugin
107
+ - **[CI/CD ready](https://github.com/microsoft/apm-action)** — GitHub Action for automated workflows
108
108
 
109
109
  ## Get Started
110
110
 
111
111
  #### Linux / macOS
112
112
 
113
113
  ```bash
114
- curl -sSL https://raw.githubusercontent.com/microsoft/apm/main/install.sh | sh
114
+ curl -sSL https://aka.ms/apm-unix | sh
115
115
  ```
116
116
 
117
117
  #### Windows
118
118
 
119
119
  ```powershell
120
- irm https://raw.githubusercontent.com/microsoft/apm/main/install.ps1 | iex
120
+ irm https://aka.ms/apm-windows | iex
121
121
  ```
122
122
 
123
123
  Native release binaries are published for macOS, Linux, and Windows x86_64. `apm update` reuses the matching platform installer.
@@ -12,7 +12,7 @@ GitHub Copilot · Claude Code · Cursor · OpenCode
12
12
 
13
13
  AI coding agents need context to be useful — standards, prompts, skills, plugins — but today every developer sets this up manually. Nothing is portable nor reproducible. There's no manifest for it.
14
14
 
15
- **APM fixes this.** Declare your project's agentic dependencies once in `apm.yml`, and every developer who clones your repo gets a fully configured agent setup in seconds — with transitive dependency resolution, just like npm or pip.
15
+ **APM fixes this.** Declare your project's agentic dependencies once in `apm.yml`, and every developer who clones your repo gets a fully configured agent setup in seconds — with transitive dependency resolution, just like npm or pip. It's also the first tool that lets you **author plugins** with a real dependency manager and export standard `plugin.json` packages.
16
16
 
17
17
  ```yaml
18
18
  # apm.yml — ships with your project
@@ -37,26 +37,26 @@ apm install # every agent is configured
37
37
 
38
38
  ## Highlights
39
39
 
40
- - **One manifest for everything** — instructions, skills, prompts, agents, hooks, plugins, MCP servers
41
- - **Install from anywhere** — GitHub, GitLab, Bitbucket, Azure DevOps, GitHub Enterprise, any git host
42
- - **Transitive dependencies** — packages can depend on packages; APM resolves the full tree
43
- - **Compile to standards** — `apm compile` produces `AGENTS.md` (GitHub Copilot, OpenCode), `CLAUDE.md` (Claude Code), and `.cursor/rules/` (Cursor)
44
- - **Content security** — `apm audit` scans for hidden Unicode characters; `apm install` blocks compromised packages before agents can read them
45
- - **Create & share** — `apm pack` bundles your current configuration as a zipped package
46
- - **CI/CD ready** — [GitHub Action](https://github.com/microsoft/apm-action) for automated workflows
40
+ - **[One manifest for everything](https://microsoft.github.io/apm/reference/primitive-types/)** — instructions, skills, prompts, agents, hooks, plugins, MCP servers
41
+ - **[Install from anywhere](https://microsoft.github.io/apm/guides/dependencies/)** — GitHub, GitLab, Bitbucket, Azure DevOps, GitHub Enterprise, any git host
42
+ - **[Transitive dependencies](https://microsoft.github.io/apm/guides/dependencies/)** — packages can depend on packages; APM resolves the full tree
43
+ - **[Content security](https://microsoft.github.io/apm/enterprise/security/)** — `apm audit` scans for hidden Unicode; `apm install` blocks compromised packages before agents read them
44
+ - **[Author plugins](https://microsoft.github.io/apm/guides/plugins/)** — build Copilot, Claude, and Cursor plugins with dependency management and security scanning, then export standard `plugin.json`
45
+ - **[Pack & distribute](https://microsoft.github.io/apm/guides/pack-distribute/)** — `apm pack` bundles your configuration as a zipped package or a standalone plugin
46
+ - **[CI/CD ready](https://github.com/microsoft/apm-action)** — GitHub Action for automated workflows
47
47
 
48
48
  ## Get Started
49
49
 
50
50
  #### Linux / macOS
51
51
 
52
52
  ```bash
53
- curl -sSL https://raw.githubusercontent.com/microsoft/apm/main/install.sh | sh
53
+ curl -sSL https://aka.ms/apm-unix | sh
54
54
  ```
55
55
 
56
56
  #### Windows
57
57
 
58
58
  ```powershell
59
- irm https://raw.githubusercontent.com/microsoft/apm/main/install.ps1 | iex
59
+ irm https://aka.ms/apm-windows | iex
60
60
  ```
61
61
 
62
62
  Native release binaries are published for macOS, Linux, and Windows x86_64. `apm update` reuses the matching platform installer.
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "apm-cli"
7
- version = "0.8.2"
7
+ version = "0.8.3"
8
8
  description = "MCP configuration tool"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -0,0 +1,13 @@
1
+ """Bundle creation and consumption for APM packages."""
2
+
3
+ from .packer import pack_bundle, PackResult
4
+ from .plugin_exporter import export_plugin_bundle
5
+ from .unpacker import unpack_bundle, UnpackResult
6
+
7
+ __all__ = [
8
+ "pack_bundle",
9
+ "PackResult",
10
+ "export_plugin_bundle",
11
+ "unpack_bundle",
12
+ "UnpackResult",
13
+ ]
@@ -46,6 +46,7 @@ def pack_bundle(
46
46
  target: Optional[str] = None,
47
47
  archive: bool = False,
48
48
  dry_run: bool = False,
49
+ force: bool = False,
49
50
  ) -> PackResult:
50
51
  """Create a self-contained bundle from installed APM dependencies.
51
52
 
@@ -57,6 +58,7 @@ def pack_bundle(
57
58
  (auto-detect from apm.yml / project structure).
58
59
  archive: If *True*, produce a ``.tar.gz`` and remove the directory.
59
60
  dry_run: If *True*, resolve the file list but write nothing to disk.
61
+ force: On collision (plugin format), last writer wins.
60
62
 
61
63
  Returns:
62
64
  :class:`PackResult` describing what was (or would be) produced.
@@ -67,6 +69,20 @@ def pack_bundle(
67
69
  """
68
70
  # 1. Read lockfile (migrate legacy apm.lock → apm.lock.yaml if needed)
69
71
  migrate_lockfile_if_needed(project_root)
72
+
73
+ # Plugin format: delegate to dedicated exporter
74
+ if fmt == "plugin":
75
+ from .plugin_exporter import export_plugin_bundle
76
+
77
+ return export_plugin_bundle(
78
+ project_root=project_root,
79
+ output_dir=output_dir,
80
+ target=target,
81
+ archive=archive,
82
+ dry_run=dry_run,
83
+ force=force,
84
+ )
85
+
70
86
  lockfile_path = get_lockfile_path(project_root)
71
87
  lockfile = LockFile.read(lockfile_path)
72
88
  if lockfile is None: