apm-cli 0.8.1__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.
- {apm_cli-0.8.1/src/apm_cli.egg-info → apm_cli-0.8.3}/PKG-INFO +11 -11
- {apm_cli-0.8.1 → apm_cli-0.8.3}/README.md +10 -10
- {apm_cli-0.8.1 → apm_cli-0.8.3}/pyproject.toml +1 -1
- apm_cli-0.8.3/src/apm_cli/bundle/__init__.py +13 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/bundle/packer.py +16 -0
- apm_cli-0.8.3/src/apm_cli/bundle/plugin_exporter.py +643 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/_helpers.py +59 -12
- apm_cli-0.8.3/src/apm_cli/commands/compile/__init__.py +11 -0
- apm_cli-0.8.1/src/apm_cli/commands/compile.py → apm_cli-0.8.3/src/apm_cli/commands/compile/cli.py +107 -290
- apm_cli-0.8.3/src/apm_cli/commands/compile/watcher.py +171 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/config.py +3 -2
- apm_cli-0.8.3/src/apm_cli/commands/deps/__init__.py +34 -0
- apm_cli-0.8.3/src/apm_cli/commands/deps/_utils.py +296 -0
- apm_cli-0.8.1/src/apm_cli/commands/deps.py → apm_cli-0.8.3/src/apm_cli/commands/deps/cli.py +64 -348
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/init.py +45 -11
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/install.py +271 -670
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/pack.py +9 -1
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/prune.py +24 -18
- apm_cli-0.8.3/src/apm_cli/commands/uninstall/__init__.py +23 -0
- apm_cli-0.8.3/src/apm_cli/commands/uninstall/cli.py +187 -0
- apm_cli-0.8.3/src/apm_cli/commands/uninstall/engine.py +383 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/update.py +3 -4
- apm_cli-0.8.3/src/apm_cli/constants.py +31 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/core/token_manager.py +23 -2
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/deps/apm_resolver.py +20 -6
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/deps/dependency_graph.py +1 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/deps/github_downloader.py +366 -30
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/deps/lockfile.py +20 -2
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/deps/plugin_parser.py +44 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/drift.py +12 -15
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/mcp_integrator.py +18 -3
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/models/__init__.py +6 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/models/apm_package.py +49 -0
- apm_cli-0.8.3/src/apm_cli/models/dependency/__init__.py +14 -0
- apm_cli-0.8.3/src/apm_cli/models/dependency/mcp.py +136 -0
- apm_cli-0.8.3/src/apm_cli/models/dependency/reference.py +958 -0
- apm_cli-0.8.3/src/apm_cli/models/dependency/types.py +63 -0
- apm_cli-0.8.3/src/apm_cli/models/results.py +25 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/models/validation.py +57 -42
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/security/content_scanner.py +3 -1
- apm_cli-0.8.3/src/apm_cli/utils/content_hash.py +72 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/utils/github_host.py +63 -1
- apm_cli-0.8.3/src/apm_cli/utils/path_security.py +58 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3/src/apm_cli.egg-info}/PKG-INFO +11 -11
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli.egg-info/SOURCES.txt +18 -4
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_apm_package_models.py +174 -3
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_github_downloader.py +1 -1
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_token_manager.py +112 -0
- apm_cli-0.8.1/src/apm_cli/bundle/__init__.py +0 -6
- apm_cli-0.8.1/src/apm_cli/commands/uninstall.py +0 -587
- apm_cli-0.8.1/src/apm_cli/models/dependency.py +0 -1085
- {apm_cli-0.8.1 → apm_cli-0.8.3}/AUTHORS +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/LICENSE +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/setup.cfg +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/client/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/client/base.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/client/codex.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/client/copilot.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/client/cursor.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/client/opencode.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/client/vscode.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/package_manager/base.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/bundle/lockfile_enrichment.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/bundle/unpacker.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/cli.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/audit.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/list_cmd.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/mcp.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/run.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/commands/runtime.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/agents_compiler.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/claude_formatter.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/constants.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/constitution.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/constitution_block.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/context_optimizer.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/distributed_compiler.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/injector.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/link_resolver.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/compilation/template_builder.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/config.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/core/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/core/conflict_detector.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/core/docker_args.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/core/operations.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/core/safe_installer.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/core/script_runner.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/core/target_detection.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/deps/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/deps/aggregator.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/deps/collection_parser.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/deps/package_validator.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/deps/verifier.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/factory.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/agent_integrator.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/base_integrator.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/command_integrator.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/hook_integrator.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/instruction_integrator.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/prompt_integrator.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/skill_integrator.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/skill_transformer.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/targets.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/integration/utils.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/models/plugin.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/output/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/output/formatters.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/output/models.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/output/script_formatters.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/primitives/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/primitives/discovery.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/primitives/models.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/primitives/parser.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/registry/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/registry/client.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/registry/integration.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/registry/operations.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/runtime/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/runtime/base.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/runtime/codex_runtime.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/runtime/copilot_runtime.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/runtime/factory.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/runtime/llm_runtime.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/runtime/manager.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/security/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/security/audit_report.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/security/gate.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/utils/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/utils/console.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/utils/diagnostics.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/utils/helpers.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/utils/version_checker.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/version.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/workflow/__init__.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/workflow/discovery.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/workflow/parser.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli/workflow/runner.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli.egg-info/dependency_links.txt +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli.egg-info/entry_points.txt +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli.egg-info/requires.txt +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/src/apm_cli.egg-info/top_level.txt +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_apm_resolver.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_codex_docker_args_fix.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_codex_empty_string_and_defaults.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_collision_integration.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_console.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_distributed_compilation.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_empty_string_and_defaults.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_enhanced_discovery.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_github_downloader_token_precedence.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_lockfile.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_runnable_prompts.py +0 -0
- {apm_cli-0.8.1 → apm_cli-0.8.3}/tests/test_runtime_manager_token_precedence.py +0 -0
- {apm_cli-0.8.1 → 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.
|
|
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
|
-
- **
|
|
105
|
-
- **
|
|
106
|
-
- **
|
|
107
|
-
- **CI/CD ready
|
|
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://
|
|
114
|
+
curl -sSL https://aka.ms/apm-unix | sh
|
|
115
115
|
```
|
|
116
116
|
|
|
117
117
|
#### Windows
|
|
118
118
|
|
|
119
119
|
```powershell
|
|
120
|
-
irm https://
|
|
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
|
-
- **
|
|
44
|
-
- **
|
|
45
|
-
- **
|
|
46
|
-
- **CI/CD ready
|
|
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://
|
|
53
|
+
curl -sSL https://aka.ms/apm-unix | sh
|
|
54
54
|
```
|
|
55
55
|
|
|
56
56
|
#### Windows
|
|
57
57
|
|
|
58
58
|
```powershell
|
|
59
|
-
irm https://
|
|
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.
|
|
@@ -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:
|