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.
- {apm_cli-0.8.6/src/apm_cli.egg-info → apm_cli-0.8.8}/PKG-INFO +2 -2
- {apm_cli-0.8.6 → apm_cli-0.8.8}/README.md +1 -1
- {apm_cli-0.8.6 → apm_cli-0.8.8}/pyproject.toml +1 -1
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/bundle/lockfile_enrichment.py +6 -1
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/cli.py +3 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/_helpers.py +4 -2
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/compile/cli.py +1 -1
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/deps/__init__.py +0 -4
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/deps/_utils.py +2 -106
- apm_cli-0.8.8/src/apm_cli/commands/deps/cli.py +783 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/install.py +553 -281
- apm_cli-0.8.8/src/apm_cli/commands/marketplace.py +436 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/pack.py +1 -1
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/uninstall/cli.py +41 -17
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/uninstall/engine.py +76 -77
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/command_logger.py +1 -0
- apm_cli-0.8.8/src/apm_cli/core/scope.py +179 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/target_detection.py +31 -8
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/github_downloader.py +68 -19
- apm_cli-0.8.8/src/apm_cli/deps/installed_package.py +54 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/lockfile.py +60 -12
- apm_cli-0.8.8/src/apm_cli/deps/registry_proxy.py +231 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/drift.py +26 -3
- apm_cli-0.8.8/src/apm_cli/integration/agent_integrator.py +434 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/base_integrator.py +88 -40
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/command_integrator.py +115 -114
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/hook_integrator.py +137 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/instruction_integrator.py +115 -102
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/prompt_integrator.py +60 -1
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/skill_integrator.py +47 -21
- apm_cli-0.8.8/src/apm_cli/integration/targets.py +364 -0
- apm_cli-0.8.8/src/apm_cli/marketplace/__init__.py +28 -0
- apm_cli-0.8.8/src/apm_cli/marketplace/client.py +302 -0
- apm_cli-0.8.8/src/apm_cli/marketplace/errors.py +44 -0
- apm_cli-0.8.8/src/apm_cli/marketplace/models.py +219 -0
- apm_cli-0.8.8/src/apm_cli/marketplace/registry.py +130 -0
- apm_cli-0.8.8/src/apm_cli/marketplace/resolver.py +229 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8/src/apm_cli.egg-info}/PKG-INFO +2 -2
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli.egg-info/SOURCES.txt +10 -0
- apm_cli-0.8.6/src/apm_cli/commands/deps/cli.py +0 -608
- apm_cli-0.8.6/src/apm_cli/integration/agent_integrator.py +0 -487
- apm_cli-0.8.6/src/apm_cli/integration/targets.py +0 -207
- {apm_cli-0.8.6 → apm_cli-0.8.8}/AUTHORS +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/LICENSE +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/setup.cfg +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/base.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/codex.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/copilot.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/cursor.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/opencode.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/client/vscode.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/package_manager/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/package_manager/base.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/adapters/package_manager/default_manager.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/bundle/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/bundle/packer.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/bundle/plugin_exporter.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/bundle/unpacker.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/audit.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/compile/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/compile/watcher.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/config.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/init.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/list_cmd.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/mcp.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/prune.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/run.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/runtime.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/uninstall/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/commands/update.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/agents_compiler.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/claude_formatter.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/constants.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/constitution.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/constitution_block.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/context_optimizer.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/distributed_compiler.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/injector.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/link_resolver.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/compilation/template_builder.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/config.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/constants.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/auth.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/conflict_detector.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/docker_args.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/operations.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/safe_installer.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/script_runner.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/core/token_manager.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/aggregator.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/apm_resolver.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/collection_parser.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/dependency_graph.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/package_validator.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/plugin_parser.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/deps/verifier.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/factory.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/mcp_integrator.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/skill_transformer.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/integration/utils.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/apm_package.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/dependency/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/dependency/mcp.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/dependency/reference.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/dependency/types.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/plugin.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/results.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/models/validation.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/output/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/output/formatters.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/output/models.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/output/script_formatters.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/ci_checks.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/discovery.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/inheritance.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/matcher.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/models.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/parser.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/policy_checks.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/policy/schema.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/primitives/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/primitives/discovery.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/primitives/models.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/primitives/parser.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/registry/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/registry/client.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/registry/integration.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/registry/operations.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/base.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/codex_runtime.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/copilot_runtime.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/factory.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/llm_runtime.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/runtime/manager.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/security/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/security/audit_report.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/security/content_scanner.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/security/file_scanner.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/security/gate.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/console.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/content_hash.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/diagnostics.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/file_ops.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/github_host.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/helpers.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/path_security.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/paths.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/version_checker.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/utils/yaml_io.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/version.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/workflow/__init__.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/workflow/discovery.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/workflow/parser.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli/workflow/runner.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli.egg-info/dependency_links.txt +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli.egg-info/entry_points.txt +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli.egg-info/requires.txt +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/src/apm_cli.egg-info/top_level.txt +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_apm_package_models.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_apm_resolver.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_codex_docker_args_fix.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_codex_empty_string_and_defaults.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_collision_integration.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_console.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_distributed_compilation.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_empty_string_and_defaults.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_enhanced_discovery.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_github_downloader.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_github_downloader_token_precedence.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_lockfile.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_runnable_prompts.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_runtime_manager_token_precedence.py +0 -0
- {apm_cli-0.8.6 → apm_cli-0.8.8}/tests/test_token_manager.py +0 -0
- {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.
|
|
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
|
|
|
@@ -13,7 +13,8 @@ _TARGET_PREFIXES = {
|
|
|
13
13
|
"claude": [".claude/"],
|
|
14
14
|
"cursor": [".cursor/"],
|
|
15
15
|
"opencode": [".opencode/"],
|
|
16
|
-
"
|
|
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
|
-
|
|
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
|
|
4
|
+
from typing import Any, Dict
|
|
5
5
|
|
|
6
|
-
from ...constants import APM_DIR,
|
|
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")
|